securite and co

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : securite and co

Re: securite and co

par moogli » 17 juin 2012, 02:46

Mais qu'est-ce qu'on peut perdre de temps avec les fautes de frappe !
:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Re: securite and co

par Bosse.cie » 15 juin 2012, 22:21

Oui.

Mais je viens de m'apercevoir qu'il y avait une faute de frappe à l'intérieur, ce qui fait qu'il prenait php 5 et non pas php 5.4.


Greuuuuuuuuuh.

Bon, maintenant, ça marche.

Je suis en train de créer tous mes bidules pour créer des utilisateurs, les mots de passe, le cryptage des infos dans la base, etc...

Mais qu'est-ce qu'on peut perdre de temps avec les fautes de frappe !


Merci pour tout.


Michel

Re: securite and co

par moogli » 15 juin 2012, 19:51

tu a essayé http://guides.ovh.com/Php5ChezOvh ?

dans un fichier .htaccess à la racine du site ?


@+

Re: securite and co

par Bosse.cie » 15 juin 2012, 15:46

Bingo, sur ovh, c'est 5.2.

D'ailleurs, ça me fait rire : il précise que si l'on veut la 5.4, il faut le notifier dans le fichier .htaccess; ce que j'ai fait... et l'on arrive à avoir la 5.2...

Mais bon.
...tu peux aussi ajouter du traitement perso, par exemple avec str_rot13 sur le mot de passe et stocker le md5 / sha* / blowfish de ça, histoire de rendre la chose plus complexe :)) ...
Je connaissais pas cette fonction. Le plus drôle, c'est que je voulais m'en fabriquer une...

Le petit plaisir de brouiller les pistes.


@ pluche.

Michel

Re: securite and co

par moogli » 15 juin 2012, 13:14

Les "pages" ce sont ce que l'on vois coté client (dans le navigateur), c'est plus parlant que des "tables" simplement parce qu'une page peux alimenter plusieurs tables.

par exemple si un metteur en scène ajoute une "pièce" il peux aussi ajouter des acteurs / comédiens voir des dates de représentations (pourquoi pas) et ceci plusieurs tables mais au final sur le navigateur il peux n'y avoir qu'une seule page avec des champs permettant le tout :)

Quant tu parles de sha512, c'est codage irréversible ?
on parle de "hachage" et oui c'est "irréversible" dans le sens où l'on ne peux pas le trouver grâce a un algorithme (contrairement à un encodage qui lui est réversible, comme SSL par exemple).
Par contre il ne faut pas se leurrer il existe maintenant des dictionnaires de md5 ou autre. Et les performances des machines actuelle permettent de faire en quelques heure une recherche par "brute force" (tester toutes les combinaisons possible jusqu’à ce que le résultat concorde).

su parle de grain de sel, c'est pas mal, tu peux aussi ajouter du traitement perso, par exemple avec str_rot13 sur le mot de passe et stocker le md5 / sha* / blowfish de ça, histoire de rendre la chose plus complexe :)).

le but n'est pas d'avoir une sécurité exemplaire car de toute façon, a un moment ou un autre, ton mot de passe transite en clair sur le réseau (du formulaire jusqu'au serveur au minimum). Après sil y existe les connexions HTTPS limitant un peu la chose, mais il faut se dire que rien n'est sur a partir du moment ou c'est sur un réseau (on peu "snifer" les paquets et voir ce que ce ça contient même ça limite le nombre de gens capable de le faire ;) ).
Le but ici va être de faire en sorte que si l'on tombre sur ta base on ai pas directement les mots de passes des gens en clair (parce que la plus part des gens utilisent le même mot de passe partout ;) ).

pour ce qui est de la dispo de blowfish cela dépend de la version de php que tu as. si supérieure ou égle à 5.3
5.3.0 PHP dispose maintenant de sa propre implémentation de crypt MD5, Standard DES, Extended DES et l'algorithme Blowfish. Il l'utilisera si le système ne fournit pas l'un ou l'autre des algorithmes.
@+

Re: securite and co

par Bosse.cie » 15 juin 2012, 11:38

Bon, faut que je regarde ça calmement, car j'ai le crâne qui fume.

Qu'appelles-tu exactement page ?

Pour les suppressions, je confirme. Les utilisateurs pourront mettre un drapeau (pas flag, na!), effacé. Mais l'effacement réel, c'est moi qui le ferai. De plus, je pense mettre en place un système d'avertissement par envoi de mail chez moi, qui récapitule les actions entreprises par les utilisateurs. Pas pour surveiller leur activité (chacun se débrouille, de toutes façons, c'est leur intérêt), mais surveiller s'il y a un problème, des trucs bizarres.

Quant tu parles de sha512, c'est codage irréversible ?

J'ai cherché ce qu'il y avait de mieux, et pas facile à trouver des infos. Les seuls choses que j'ai trouvé :

- md5, c'est bien, mais "dépassé".
- sha1 c'est mieux.
- blowfish (avec la fonction crypt()), c'est top.

Le problème, je n'ai pas la possibilité blowfish avec crypt() avec mon serveur mutualisé. Il ne me reste que sha1 ou md5.
Bien entendu, je vais "saler" tout ça (maintenant que j'ai vu ce que c'est).

Edit : Maintenant, piscine, j'ai trop chaud au crâne !

Re: securite and co

par moogli » 15 juin 2012, 11:00

* Un enregistrement de table, on appelle ça comment ? Une ligne ?
oui une ligne ou un tuple, parfois un enregistrement :)

avec tes dernières précisions c'est beaucoup plus clair.

La gestion de droit peux ce faire comme sur unix avec un flag lecture, un ecriture

donc une table qui liste les droits
lecture
écriture (insert)
modification (update)
suppression (a priori pas de suppression sauf pour toi :) )

Donc a priori un système du genre
create table utilisateurs(
	idUtilisateur int unsigned not null auto_increment primary key,
	nom varchar(50) not null,
	prenom varchar(50) not null,
	motdepasse varchar(128) not null,
	email varchar(255) not null
)engine=innodb;

create table droits(
	idDroit int not null auto_increment primary key,
	nom varchar(25) not null,
	description varchar (150) not null
)engine=innodb;

create table pages (
	idPage int unsigned not null auto_increment primary key,
	idUtilisateur int unsigned not null, -- l'auteur de la page
	nom varchar(50) not null,
	constraint _fk_auteur_page foreign key idUtilisateur references utilisateurs(idUtilisateur)
)engine=innodb;

create table droitUtilisateurPage (
	idDup int unsigned not null auto_increment primary key,
	idPage int unsigned not null,
	idUtilisateur int unsigned not null,
	idDroit int unsigned not null,
	constraint fk_pages foreign key idPage references pages(idPage),
	constraint fk_utilisateur foreign key idUtilisateur references utilisateurs(idUtilisateur),
	constraint fk_droit foreign key idDroit references droits(idDroit),
)engine=innodb;
les utilisateurs se connecte a l'aide d'un identifiant / mot de passe (j'ai mis l'email pour l'identifiant unique, le nom n'étant pas un bon candidat :) ).
Le mot de passe est un varchar 128 pour pouvoir stocker un sha-512.

Tu auras ainsi des utilisateurs, des pages des droits et une jointure de tous cela.

si un droit n'est pas présent dans la table c'est qu'il n'est pas accordé (pour alléger la table :) ).

donc si x veut accéder à la page modification de la page Y il faut vérifier dans la table que le couple x,Y, modification existe sinon => erreur.

cela permet une gestion très fine des droits.

l'inconvénient est les temps qu'il faut pour les attribuer.

Pour cela il est possible de créer une gestion de groupe d'utilisateur.

tu peux aussi aussi faire un petit script permettant au créateur de la page de gérer les accès lui même :mrgreen:

Attention il te faut prévoir une échappatoire pour les admin (donc toi au minimum) afin de passer outre les droits de la table.

la soit tu ajoute un flag dans la table utilisateur (adimin / normal) soit tu ajoute dans la table tout les droit pour toutes les pages, pour toi (la première solution semble la plus performante il te suffit d'avoir cette info en session).

@+

Re: securite and co

par Bosse.cie » 15 juin 2012, 10:27

C'est bien ça.

Pour l'instant (ça peu se développer ultérieurement), il y aurait deux tables. Les utilisateurs n'auront en aucun cas le droit d'effacer la table.

Table 1 :

Certains pourront rien faire sur cette table : aucun droit quoi.
Certains pourront lire tous les enregistrements, mais c'est tout.
Certains pourront lire et écrire sur cette table, mais pas lire les enregistrements des autres.
Certains pourront lire tous les enregistrements mais écrire et modifier seulement les leurs.
Enfin certains pourront lire et écrire sur tous les enregistrements.

Pareil pour la table 2.

Un seul (moi, le super-héros), pourra tout faire. Mais ça, ce sera par phpmyadmin.

Il n'a jamais été question de laisser faire les utilisateurs qui de toutes façons, pour la plupart, n'y connaissent rien et ont besoin d'être pris par la main (ce n'est pas une critique, les trois-quart sont des comédiens ou metteurs en scène, et leurs capacités sont ailleurs).

Pour les droits, je ne vois pas bien le truc dont tu parles.

Je pensais à un truc tout simple :
Une table des droits d'accès.
L'utilisateur arrive, s'identifie, le script va lire l'enregistrement dans cette table le concernant. Si ok, dans ce même enregistrement *, il y a une valeur qui spécifie ces droits sur table 1, et pareil sur table2.
Quelque part, il y a un fichier sur le serveur qui donne les identifiants et mot de passe d'accès à la table correspondants, que le script va aller chercher.

Voilà.



* Un enregistrement de table, on appelle ça comment ? Une ligne ?

Re: securite and co

par moogli » 15 juin 2012, 10:09

je pense qu'il faut comprendre ce que tu entends par accès aux tables.

Est ce qu'il s'agit direct (pma ou une console) ?
S'agit-il de pouvoir altérer la structure de la ou des tables (alter / drop) effectivement donner des droits à un utilisateur du SGBD
S'agit-il d'insérer du contenue ou d'en modifier (insert / update / delete) sur la table ?

quoi qu'il en soit, un utilisateur lambda ne devrait avoir accès au SGBD et un front end lui est fournit (page web, client lourd etc).

Et dans ce cas tu va devoir gérer des droits sur les actions réalisable par un utilisateur (souvent résumé à ACL).
C'est plus complexe a mettre en œuvre (une table utilisateurs, une table des droits et une pour la jointure des deux premières, au minimum) mais efficace (tu peux inclure une gestion de groupe, qui va contenir un certain nombre de droit).

Dans le tous les cas si ton utilisateur laisse trainer ses accès sur son clavier quelqu'un pourra mettre le brin dans l'appli :)

Mais en fonction des droits prévu à la base l'effet sera limité. (en aucun cas un utilisateur ne devrait avoir les droits alter et drop par exemple :) )


@+

Re: securite and co

par Bosse.cie » 15 juin 2012, 09:58

Désolé pour le retard, mais j'avais des rendez-vous.

Bon, j'entends ce qui concerne le fait de limiter les droits, et bien savoir qui fait quoi.

Après, la question était quand même de donner un identifiant/password sur la table concernée, avec des droits limités; et pas non plus aller le chanter sur les toits.

Après, je vois quand même qu'en "découpant", c'est à dire droits d'accès au script -> droit d'accès à la table, cela complique (pas énorme) un peu, et surtout oblige à garder le couple identifiant/password mémorisé (même codé) sur le serveur; ce qui en soit est une idée qui me déplaît. Et au bout du compte, donnera les mêmes droits d'accès à la table qu'en donnant un identifiant/password qui soit celui de la table en question.

Après, je comprends dans la théorie ton raisonnement, mais dans le concret, je ne vois plus trop l'intérêt.

Mais bon, je ferai comme ça.

Pour être honnête, j'ai déjà fait une application pour autre chose qui fonctionne comme ça; donc j'aurai presque qu'à faire du copier-coller.
C'est justement en regardant cet ancien code que je me suis posé la question de l'utilité de la chose.


En tous cas, merci de la réactivité, et c'est toujours intéressant de discuter de trucs qui passent par la tête (to be or not to be).

Le titre du fil aurait pu être : est-il plus risqué de donner un accès restreint à une table ou de donner un accès à un script qui donne automatiquement un accès restreint à une table ?


Merci


Michel

Re: securite and co

par xTG » 14 juin 2012, 11:36

Non tu n'as pas compris.
Le but est de ne donner accès qu'à ce qui est nécessaire.

La lettre doit aller dans la maison.
Mais le facteur ne doit pas avoir accès à la maison pour des raisons évidentes de sécurité.
Donc nous lui donnons la clé de la boite aux lettres.
Ta fille en rentrant de l'école ouvre la boite aux lettres et va déposer la lettre dans la maison.

Rapprochons nous maintenant du processus informatique.
La lettre est la donnée à transmettre (fichier, tapé au clavier, ect).
Le facteur est l'utilisateur.
La boite aux lettre est le formulaire de saisie (qui est protéger par un couple d'identifiants qui sont la clé de la boite aux lettres).
Ta charmante petite fille est le script PHP qui a accès à tout, elle prend donc les données et les mets dans la maison (en base de données).

Dans ce processus le facteur n'a eu accès qu'à une zone protégée.
Cette image est-elle mieux ?

Re: securite and co

par Bosse.cie » 14 juin 2012, 11:26

Si, je crois comprendre; enfin peut-être.

Sauf que donner la clé du script, par rebond, donne la clé de la table.

En gros, si je suis ton image, on pourrait dire qu'il y a l'option :
- Je te donne la clé de la porte d'entrée.
Ou l'option :
-Je te donne la clé de la boite aux lettres, et à l'intérieur, se trouve la clé de la porte d'entrée.

Soyons clair, je n'ai aucune certitude, je me pose des questions, c'est tout.

Re: securite and co

par xTG » 14 juin 2012, 11:03

Ce que tu ne sembles pas comprendre c'est la notion de droits.
Donner des identifiants sur une table ce n'est pas la même granularité que de donner des accès sur un script PHP.

Si tu préfères c'est comme donner la clé de la boite aux lettres au facteur qui se trouve être aussi la clé de la porte d'entrée.

Re: securite and co

par Bosse.cie » 14 juin 2012, 11:00

C'est ce que j'avais cru comprendre. Mais je me demandais si c'était ce qui est le plus sûr (dans le cas où on n'a pas beaucoup d'utilisateurs), et en plus, c'est plus compliqué.

Re: securite and co

par Mazarini » 14 juin 2012, 10:45

Bonjour,

Ca dépend de comment tu travailles, mais en général, les utilisateurs ont un user et un mot de passe qui leur permet de s'identifier au script PHP et le script PHP utilise un user et un mot de passe pour accéder à la base de données. Le user utilisé par PHP est le souvent le user "admin" de la base de données.