Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1819 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Comparaison de mot de passe mysql/php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparaison de mot de passe mysql/php

n°1591925
ULK-
Posté le 26-07-2007 à 16:19:11  profilanswer
 

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

mood
Publicité
Posté le 26-07-2007 à 16:19:11  profilanswer
 

n°1591992
AlphaZone
Posté le 26-07-2007 à 18:25:17  profilanswer
 

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."
n°1592010
durkheim
Posté le 26-07-2007 à 19:10:51  profilanswer
 

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

n°1592020
naceroth
Posté le 26-07-2007 à 19:45:06  profilanswer
 

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 ?

n°1592206
ULK-
Posté le 27-07-2007 à 09:47:37  profilanswer
 

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...

n°1592228
AlphaZone
Posté le 27-07-2007 à 10:15:49  profilanswer
 

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."
n°1592233
FlorentG
Posté le 27-07-2007 à 10:20:56  profilanswer
 

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

n°1592297
ULK-
Posté le 27-07-2007 à 11:18:23  profilanswer
 

>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
n°1592339
AlphaZone
Posté le 27-07-2007 à 12:42:50  profilanswer
 

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."
n°1592343
scorbutic
Posté le 27-07-2007 à 12:48:16  profilanswer
 

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 =)

mood
Publicité
Posté le 27-07-2007 à 12:48:16  profilanswer
 

n°1592344
FlorentG
Posté le 27-07-2007 à 12:49:57  profilanswer
 

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

n°1592401
omega2
Posté le 27-07-2007 à 14:31:16  profilanswer
 

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

n°1592411
FlorentG
Posté le 27-07-2007 à 14:47:05  profilanswer
 

hash('sha256', $pouet);

n°1592434
AlphaZone
Posté le 27-07-2007 à 15:22:45  profilanswer
 

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."
n°1592439
FlorentG
Posté le 27-07-2007 à 15:26:49  profilanswer
 

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

n°1592442
AlphaZone
Posté le 27-07-2007 à 15:28:08  profilanswer
 

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."
n°1592503
ULK-
Posté le 27-07-2007 à 16:26:33  profilanswer
 

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
n°1592518
FlorentG
Posté le 27-07-2007 à 16:39:02  profilanswer
 

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

n°1592918
TheRom_S
Posté le 29-07-2007 à 13:17:24  profilanswer
 

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
n°1592935
Kyfun
Les choses se passent !
Posté le 29-07-2007 à 13:43:45  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Comparaison de mot de passe mysql/php

 

Sujets relatifs
[RESOLU] MySQL jointure sur clé primaire LENTE[MySQL]Installation Drivers ODBC sous Vista en lignes de commandes
[MYSQL] Update un peu torduMySQL: UTF8 vs. latin_swedish & error 1406
[VB 2005] Utilisation de Base de donnée MySQLmysql 5
[PHP/MySQL] Automatisation convertion xls -> csv pour update BDD (en pUn logiciel pour administrer une base de donnée MySQL ?
[Résolu] Lancement script avec MySQL Query BrowserPb d'insertion CSV dans MySQL
Plus de sujets relatifs à : Comparaison de mot de passe mysql/php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR