Connection avec mot de pass hashé
Fermé
Ibilolz
Messages postés
130
Date d'inscription
mardi 1 avril 2014
Statut
Membre
Dernière intervention
26 juin 2023
-
Modifié par Ibilolz le 14/05/2014 à 13:00
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 16 mai 2014 à 09:09
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 16 mai 2014 à 09:09
A voir également:
- Connection avec mot de pass hashé
- Voir mot de passe wifi android - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Trousseau mot de passe iphone - Guide
- Identifiant et mot de passe - Guide
2 réponses
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 14/05/2014 à 15:16
Modifié par Pitet le 14/05/2014 à 15:16
Salut,
Premièrement il semble que tu ai une faute de frappe sur cette ligne :
$ousername à la place de $username
Aucun intérêt à utiliser la fonction stripslashes sur tes données avant les utiliser en sql. Pour échapper la caractères spéciaux avant d'utiliser tes données en sql, il faut uniquement utiliser mysql_real_escape_string(). Utilise stripslashes (ou htmlentities) uniquement lors de l'affichage html.
Enfin, pour vérifier ton mot de passe hashé en bdd avec celui saisie par l'utilisateur, tu peux faire la comparaison directement dans ta requête :
Si ta requête te retourne un résultat : le login et le password sont correct. Si la requête ne te retourne aucun résultat, le couple login/password n'est pas correct.
Bonne journée
PS : comme d'habitude, on déconseille d'utiliser la vieille et obsolète extension Mysql en php (fonction mysql_*). Préfère PDO ou Mysqli ;)
Premièrement il semble que tu ai une faute de frappe sur cette ligne :
$ousername = stripslashes($_POST['username']);
$ousername à la place de $username
Aucun intérêt à utiliser la fonction stripslashes sur tes données avant les utiliser en sql. Pour échapper la caractères spéciaux avant d'utiliser tes données en sql, il faut uniquement utiliser mysql_real_escape_string(). Utilise stripslashes (ou htmlentities) uniquement lors de l'affichage html.
Enfin, pour vérifier ton mot de passe hashé en bdd avec celui saisie par l'utilisateur, tu peux faire la comparaison directement dans ta requête :
// pas de stripslashes avant le traitement sql ! $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string(crypt($_POST['password'])); $req = mysql_query('select id, rang from users where username="'.$username.'" AND password="' . $password . '"');
Si ta requête te retourne un résultat : le login et le password sont correct. Si la requête ne te retourne aucun résultat, le couple login/password n'est pas correct.
Bonne journée
PS : comme d'habitude, on déconseille d'utiliser la vieille et obsolète extension Mysql en php (fonction mysql_*). Préfère PDO ou Mysqli ;)
Ibilolz
Messages postés
130
Date d'inscription
mardi 1 avril 2014
Statut
Membre
Dernière intervention
26 juin 2023
14 mai 2014 à 20:12
14 mai 2014 à 20:12
Bonsoir, j'ai donc suivi vos conseils :
Mais maintenant je n'arrive plus a me connecter, il ne reconnait pas les mdp hachés je pense du coup pour lui le couple est incorrect
<?php include('config2.php'); //Si lutilisateur est connecte, on le deconecte if(isset($_SESSION['username'])) { //On le deconecte en supprimant simplement les sessions username et userid unset($_SESSION['username'], $_SESSION['userid']); header("location: index.html" ); ?> <?php } else { $username = ''; //On verifie si le formulaire a ete envoye if(isset($_POST['username'], $_POST['password'])) { $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string(crypt($_POST['password'])); } //On recupere le mot de passe de lutilisateur $req = mysql_query('select id, rang from users where username="'.$username.'" AND password="' . $password . '"'); $dn = mysql_fetch_array($req); //On le compare a celui quil a entre et on verifie si le membre existe if($dn['password']==$password and mysql_num_rows($req)>0) { //Si le mot de passe es bon, on ne vas pas afficher le formulaire $form = false; //On enregistre son pseudo dans la session username et son identifiant dans la session userid $_SESSION['username'] = $_POST['username']; $_SESSION['userid'] = $dn['id']; $_SESSION['rang'] = $dn['rang']; if(isset($_SESSION['rang'])) { if($_SESSION['rang']==1) header('location:index2.php'); else header('location:index3.php'); } } else { //Sinon, on indique que la combinaison nest pas bonne echo 'La combinaison n\'est pas bonne.'; header("location: index.html" ); } } ?>
Mais maintenant je n'arrive plus a me connecter, il ne reconnait pas les mdp hachés je pense du coup pour lui le couple est incorrect
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
15 mai 2014 à 23:19
15 mai 2014 à 23:19
Il faut que tu hash tes mots de passe à l'insertion en bdd (cf. ton premier message) de la même façon que tu as fait ici :
D'abord on hash, et ensuite on protège notre chaine pour l'utiliser dans une requête.
$hash = mysql_real_escape_string(crypt($_POST['mdp'])); $sql = "INSERT INTO users (prenom,nom,date_naissance,username,password) VALUES ('$pre','$nom','$date','$login','$hash')";
D'abord on hash, et ensuite on protège notre chaine pour l'utiliser dans une requête.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
16 mai 2014 à 09:09
16 mai 2014 à 09:09
En fait ta condition
ne peut pas fonctionner car tu ne récupère pas le password dans ta requête, donc la variable $dn['password'] est nulle.
D'ailleurs tu n'as pas besoin de faire cette comparaison puisque tu l'as déjà faite dans ta requête. Tu as juste à vérifier si le nombre de ligne retournée par la requête est égal à 0 ou 1.
if($dn['password']==$password
ne peut pas fonctionner car tu ne récupère pas le password dans ta requête, donc la variable $dn['password'] est nulle.
D'ailleurs tu n'as pas besoin de faire cette comparaison puisque tu l'as déjà faite dans ta requête. Tu as juste à vérifier si le nombre de ligne retournée par la requête est égal à 0 ou 1.