Comparaison de mot de passe mysql/php

Comparaison de mot de passe mysql/php - PHP - Programmation

Marsh Posté le 26-07-2007 à 16:19:11    

Bonjour,
 
Je cherche a donner accès a des rubriques de mon site en fonction des droits des utilisateur sur ma base Mysql
Par exemple si la personne avec les droits UPDATE se logue, elle aura accès aux rubrique de modifications
 
J'ai donc un formulaire avec login/mot de passe
 
Puis je teste l'ensemble de cette façon :  
 

Code :
  1. // Je possède 2 variables $login et $password, récupérées du formulaire
  2. // J'ai selectionné la base "mysql"  
  3. $checkUser = "SELECT user, password FROM user WHERE user = '".$login."'";
  4. $resCheckUser = mysql_query($checkUser) or die ( mysql_error() );
  5. if ($resCheckUser) {
  6. $success = mysql_num_rows($resCheckUser);
  7. // Si utilisateur existe
  8. if($success==1) {
  9.  $tmp = mysql_fetch_row($resCheckUser);
  10.  $pass = $tmp[1];
  11.  //Si le mot de passe concorde
  12.  if ($password==$pass) {
  13.   $ret=true;
  14.  }
  15. }
  16. }


 
Le soucis c'est au niveau de ma comparaison de mot de passe, ça n'est jamais égal, car mysql crypte les mot de passe (un truc genre a1dc91c907325c )
 
Je voulais donc crypter la valeur de $password avant la comparaison, avec les fonction php, mais que ça soit avec md5($password), sha1($password) les chaines ne sont jamais égales.
 
Je précise que j'ajoute les utilisateurs et mot de passe en passant par phpmyadmin

Reply

Marsh Posté le 26-07-2007 à 16:19:11   

Reply

Marsh Posté le 26-07-2007 à 18:25:17    

Salut,
 
Pourquoi tu ne crypte pas ta valeur et tu fais ta comparaison dans ta requête ? C'est bien plus simple et plus sécurisé.
 
A l'origine MySQL ne crypte pas les mots de passe. Vérifie que le type de ton champs est une chaine de caractère. A mon avis tu dois te tromper quelque part.


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
Reply

Marsh Posté le 26-07-2007 à 19:10:51    

Peut être il y a-t-il un champ de type password dans mysql??

Reply

Marsh Posté le 26-07-2007 à 19:45:06    

ULK- a écrit :


Je précise que j'ajoute les utilisateurs et mot de passe en passant par phpmyadmin


 
Dans ce cas, c'est plutôt à phpmyadmin qu'il faudrait poser la question.
 
Il utiliserait pas la fonction password() de Mysql par hasard ?

Reply

Marsh Posté le 27-07-2007 à 09:47:37    

Merci pour les réponses
 
Si je comprend, il faudrais que je teste avec ce type de requete :
 
SELECT * FROM user WHERE user = '".$login."' AND password = PASSWORD('".$password."')
 
Ou je me trompe...

Reply

Marsh Posté le 27-07-2007 à 10:15:49    

Oui l'idée c'est ça :)
 
Mais je te conseillerais de crypter tes mots de passe en md5


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
Reply

Marsh Posté le 27-07-2007 à 10:20:56    

ULK- a écrit :

Merci pour les réponses
 
Si je comprend, il faudrais que je teste avec ce type de requete :
 
SELECT * FROM user WHERE user = '".$login."' AND password = PASSWORD('".$password."')
 
Ou je me trompe...


Attention, si les magic_quotes_gpc sont pas activée, t'as une énorme faille de sécurité. utiliser mysql_real_escape_string() autour de $login

Reply

Marsh Posté le 27-07-2007 à 11:18:23    

>Alphazone, tu veux dire avant de les insérer ? a la création de l'utilisateur ?
J'imagine que phpmyadmin le fait, faudrais voir ce qu'il fait, lors de l'ajout d'un utilisateur, j'avais parcouru ces fichier pour voir, mais j'avoue m'y être un peu perdu.
 
 
>FlorentG, Merci, elle ne sont effectivement pas activée en vue de php6, j'ai utilisé addslashes après chaque récupération de variable $_POST, ça dois le faire non ?
 
edit : voici ma fonction qui a l'air de fonctionner, mais je suis ouvert a vos remarques :
 

Code :
  1. public function checkUser($login=null, $password=null) {
  2. $ret=false;
  3. if($login==null || $password==null) {
  4. $login = GestionSession::getInstance()->getUser();
  5. $password = GestionSession::getInstance()->getPass();
  6. }
  7. // La valeur par défaut (droits restreints) doit renvoyer faux, on ne la teste donc pas
  8. if ($login!=constant("USERDEFAUT" )) {
  9.  // On selectionne la base mysql
  10.  $this->select("mysql" );
  11.  $checkUser = "SELECT user, password FROM user WHERE user = '".$login."' AND password = PASSWORD('".$password."')" ;
  12.  $resCheckUser = mysql_query($checkUser) or die ( mysql_error() );
  13.  // on reselectionne la base par défaut
  14.  $this->select();
  15.  if ($resCheckUser) {
  16.   $success = mysql_num_rows($resCheckUser);
  17.   // Si utilisateur existe
  18.   if($success==1) {
  19.    $ret=true;
  20.   }
  21.  }
  22. }
  23. return $ret;

Message cité 1 fois
Message édité par ULK- le 27-07-2007 à 11:22:50

---------------
Mes ventes
Reply

Marsh Posté le 27-07-2007 à 12:42:50    

ULK- a écrit :

>Alphazone, tu veux dire avant de les insérer ? a la création de l'utilisateur ?


Yes ! :)


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
Reply

Marsh Posté le 27-07-2007 à 12:48:16    

Encode ton mot de passe en md5 a la création :-) du genre md5($mdp). Puis après tu fais ta verif sur md5($mpd_util) par rapport à celui qui est dans la BDD.
 
Ca marche plutot bien, et c'est "relativement" fiable =)

Reply

Marsh Posté le 27-07-2007 à 12:48:16   

Reply

Marsh Posté le 27-07-2007 à 12:49:57    

Notez que pour des mots de passes simples (style [a-zA-Z0-9]), md5 n'est plus très fiable. Moi j'utilise sha256

Reply

Marsh Posté le 27-07-2007 à 14:31:16    

FlorentG > T'utilises quoi pour obtenir un sha256 avec un site en php?

Reply

Marsh Posté le 27-07-2007 à 14:47:05    

hash('sha256', $pouet);

Reply

Marsh Posté le 27-07-2007 à 15:22:45    

FlorentG a écrit :

Notez que pour des mots de passes simples (style [a-zA-Z0-9]), md5 n'est plus très fiable. Moi j'utilise sha256


Pourrais-tu donner un peu plus de détail ?


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
Reply

Marsh Posté le 27-07-2007 à 15:26:49    

AlphaZone a écrit :


Pourrais-tu donner un peu plus de détail ?


Y'a plein de site, style md5.rednoize.com ou d'autres qui te retrouvent soit l'orgine, soit une collision avec des md5

Reply

Marsh Posté le 27-07-2007 à 15:28:08    

Merci pour le lien. Je ne connaissais pas :)


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
Reply

Marsh Posté le 27-07-2007 à 16:26:33    

Autre question :  
 
Lorsque j'ai un champ formulaire du type :  

Code :
  1. <select name="boites">
  2. <option selected = "selected" value="Boite &quot;GE&quot;">Boite &quot;GE&quot;</option>
  3. [/select]


 
Ce qui donne ' Boite "GE" ', a l'affichage.
 
Je recupere, la variable avec $_POST['boites']
Le truc c'est que cette variable a pour valeur ' Boite "GE" ', alors que pour moi elle devrais avoir pour valeur ' Boite &quot;GE&quot; ' (cad la valeur de value en html)
 
Un traitement est donc effectué, entre la valeur dans value, et la recuperation de la variable  
Un traitement comme html_entities_decode
 
Est ce que ce que je dis est exact ? Et si oui comment ne pas dépendre de ce traitement automatique ?


---------------
Mes ventes
Reply

Marsh Posté le 27-07-2007 à 16:39:02    

C'est exact, et il n'y a rien à faire... Ou alors faut doublement échapper la variable, mais ça fait chelou

Reply

Marsh Posté le 29-07-2007 à 13:17:24    

il y a aussi la fonction crypt de PHP qui est assez intéressante puisque le résultat n'est pas toujours le même, c'est ce que j'utilise


---------------
The Rom's, à votre service
Reply

Marsh Posté le 29-07-2007 à 13:43:45    

FlorentG a écrit :

hash('sha256', $pouet);


 
Perso je rajoute un "grain de sel", au sha :), ça ajoute une bonne dose de sécu.
 

Code :
  1. $grainDeSel = "unechainequifaitgraindesel"; //grain de sel
  2. $pwd = $pwd.$grainDeSel;
  3. $pwd = sha1($pwd); //hash sha


---------------
Comme dirait quelqu'un de beaucoup plus avisé que moi, quelquefois c'est toi qui cognes le bar mais d'autres fois, et ben, c'est le bar qui te cogne.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed