problème de connexion a la base de donnée

Eléphanteau du PHP | 16 Messages

15 sept. 2017, 00:02

salut tout le monde,

J'ai un petit soucis et j'aimerai obtenir de l'aide svp. voici mon problème:

J'ai codé une application android qui permet aux utilisateurs de se connecté a une base de donnée après enregistrement mais le problème est que depuis que j'ai decidé d'utiliser password_hash pour hasher les mots de passes avant de les stockés il est desormais impossible pour un utilisateur deja enregistré de se connecté avec ses identifiant car je n'arrive pas a verifié le mot de passe en claire que l'utilisateur entre et le mot de passe hashé present dans la base de donnée je sais qu'il faut utiliser password_verify et j'ai beau retourné et retourné mon code j'y arrive pas. aidez moi svp...

voici mes codes:

inscription

Code : Tout sélectionner

<?php if($_SERVER['REQUEST_METHOD']=='POST'){ // echo $_SERVER["DOCUMENT_ROOT"]; //including the database connection file include_once("config.php"); $name = $_POST['name']; $prenom = $_POST['prenom']; $phone = $_POST['phone']; $pass = password_hash( $_POST['pass'], PASSWORD_DEFAULT); $pass_confirm = password_hash( $_POST['pass_confirm'], PASSWORD_DEFAULT ); if($name == '' || $phone == '' || $pass == '' || $prenom == '' || $pass_confirm == ''){ echo json_encode(array( "status" => "false","message" => "Parameter missing!") ); }else{ $query= "SELECT * FROM identifications WHERE phone='$phone'"; $result= mysqli_query($con, $query); if(mysqli_num_rows($result) > 0){ echo json_encode(array( "status" => "false","message" => "Ce numero utilise un autre compte!") ); }else{ $query = "INSERT INTO identifications (name,prenom,phone,pass,pass_confirm) VALUES ('$name','$prenom','$phone','$pass','$pass_confirm')"; if(mysqli_query($con,$query)){ $query= "SELECT * FROM identifications WHERE phone='$phone'"; $result= mysqli_query($con, $query); $emparray = array(); if(mysqli_num_rows($result) > 0){ while ($row = mysqli_fetch_assoc($result)) { $emparray[] = $row; } } echo json_encode(array( "status" => "true","message" => "Successfully registered!" , "data" => $emparray) ); }else{ echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") ); } } mysqli_close($con); } } else{ echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") ); } ?>
connexion

Code : Tout sélectionner

<?php if($_SERVER['REQUEST_METHOD']=='POST'){ // echo $_SERVER["DOCUMENT_ROOT"]; //including the database connection file include_once("config.php"); $phone = $_POST['phone']; $pass = $_POST['pass']; if( $phone == '' || $pass == '' ){ echo json_encode(array( "status" => "false","message" => "Parameter missing!") ); }else{ $query= "SELECT * FROM identifications WHERE phone='$phone'"; $hash = $result['pass']; if(password_verify($_POST['pass'], $hash)){ $result= mysqli_query($con, $query); if(mysqli_num_rows($result) > 0){ $result= mysqli_query($con, $query); $emparray = array(); if(mysqli_num_rows($result) > 0){ while ($row = mysqli_fetch_assoc($result)) { $emparray[] = $row; } } echo json_encode(array( "status" => "true","message" => "Login successfully!", "data" => $emparray) ); }else{ echo json_encode(array("status" =>"true","message" =>"Mot de passe incorrect")); } }else{ echo json_encode(array( "status" => "false","message" => "Invalid username or password!") ); } mysqli_close($con); } } else{ echo json_encode(array( "status" => "false","message" => "Error occured, please try again!") ); } ?>
merci de me lire!

Eléphanteau du PHP | 16 Messages

15 sept. 2017, 08:57

Bonjour
Personne pour m'aider? :(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 sept. 2017, 09:20

Doucement, on est tous bénévoles et ça nous arrive de dormir aussi entre 23h et 8h du matin, merci de ne pas s'impatienter ;-)

Tu as 2 possibilités pour que l'identification de tes anciens comptes (avec le mdp en clair) continue de fonctionner :
1) Soit tu fais un petit script qui va rechiffrer tous les mdp en clair pour qu'ils soient désormais hashé avec password_hash(), comme ça ta base utilisateur sera uniforme
2) Soit tu ajoute une 2nde vérification, si password_verify() échoue, alors tu vérifies si le mdp en clair est bon

La solution la plus rapide est la 2nde mais la meilleure solution est la 1ère afin d'avoir une seule méthode de connexion et de ne plus avoir de mdp en clair
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 16 Messages

15 sept. 2017, 09:31

merci @rthur et desolé si j'ai été si impatient .

En fait lors de l'inscription, le mot de passe est hashé et stocké correctement et lors de la connexion j'aimerai comparer le mot de passe en claire que l'utilisateur a entré et le mot de passe hashé qui existe deja dans la base de donnée. pour ça je dois recupéré le mot de passe hashé deja present dans la base de donnée et utiliser password_verify dessu pour savoir s'il concorde avec le mot de passe que l'utilisateur vient d'entré et c'est la le gros problème. c'est pour ça que j'ai posté mon code pour que vous m'aidez a comprendre ce qui ne va pas si j'ai mal utilisé password_verify.

Merci!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 sept. 2017, 14:10

Ah ok, j'avais pas compris.
Fait un var_dump de ta variable $hash, tu verras qu'elle est vide car tu as oublié d'exécuter ta requête ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 1967 Messages

15 sept. 2017, 15:16

Ton code est fortement sujet au injection sql, si une personne mal intentionnée met une 2eme requète à la place de son numéro de téléphone, il a accés à tout ce qu'il veut
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

15 sept. 2017, 15:21

Ton code est fortement sujet au injection sql, si une personne mal intentionnée met une 2eme requète à la place de son numéro de téléphone, il a accés à tout ce qu'il veut
Oui je vais reglé les problèmes de sécurité un peu plutard pour le moment j'aimerai dabor pouvoir virifié le mot de passe que l'utilisateur entre a la connexion et le mot de passe hashé present dans la base de donnée. merci de m'aider svp!

Eléphanteau du PHP | 16 Messages

16 sept. 2017, 14:58

Personne n'a quelque chose pour moi?

Mammouth du PHP | 1967 Messages

18 sept. 2017, 08:15

Ah ok, j'avais pas compris.
Fait un var_dump de ta variable $hash, tu verras qu'elle est vide car tu as oublié d'exécuter ta requête ;)
Ce message te donne la réponse attendue
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube