IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

password_verify retourne faux avec bon match [PHP 7]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 39
    Points : 29
    Points
    29
    Par défaut password_verify retourne faux avec bon match
    Bonjour

    j'ai stocké mon hash dans une DB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $cxn = mysqli_connect($host,$user,$password,$database )
        or die ("Connexion au serveur impossible, réessayez plus tard");
     
    $pass_hache = password_hash("monmotdepasse", PASSWORD_DEFAULT);
     
    $req = "INSERT INTO maTable (pwd) VALUES('$pass_hache')";
    		$result = mysqli_query($cxn,$req)
    				  or die ("La requête ne peut être exécutée");
    En effet, le hash est bien stocké dans la DB dasn un VARCHAR (255)

    Puis je vérifie le password saisi avec le hash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
    	extract($_POST);
    	$sql = "select pwd from maTable where login='".$login."'";
    	$req = mysqli_query( $cxn, $sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    	$data = mysqli_fetch_assoc($req);
    	//la ligne suivante sert si on ne saisit rien, car on a accès à page.php)
    	if ($data > 0) { 
    		$isPasswordCorrect = password_verify($pass, $data['pwd']);
     
    			if ($isPasswordCorrect){
    				echo '<p>Mauvais login / password. Merci de recommencer</p>';
    				include('i.html'); // On inclut le formulaire d'identification
    				exit;
    			} else {
    				session_start();
    				$_SESSION['log'] = $login;
    				include ('page.php');
    			}   
    	} else { 
    	echo '<p>Vous avez oublié de remplir un champ.</p>';
    		include('i.html'); // On inclut le formulaire d'identification
    		exit;
    	}
    } else {
    		echo '<p>Vous avez oublié de remplir un champ.</p>';
    		include(i.html'); // On inclut le formulaire d'identification
    		exit;
    }

    Pourtant je n'ai pas accès à page.php avec le mot de passe, mais seulement avec le login:
    - le login suffit, le mot de passe peut être n'importe quoi sauf le bon mot de passe
    - le login + mot de passe ne marche pas

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 894
    Points : 6 648
    Points
    6 648
    Par défaut
    Ton test final est inversé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( !$isPasswordCorrect ) {
        echo '<p>Mauvais login / password. Merci de recommencer</p>';
        include('i.html'); // On inclut le formulaire d'identification
        exit;
    }
    session_start();
    $_SESSION['log'] = $login;
    include ('page.php');
    Il y a pas mal d'autres erreurs dans ton script, en vrac:
    • utilisation de extract (ne pas utiliser cette fonction)
    • les requêtes ne sont pas préparées
    • il manque un quote: include(i.html');
    • if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])): le isset($_POST) && ne sert à rien


    Pour éviter d'avoir trop de if else imbriqués, tu peux aussi inverser les conditions et profiter du exit. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (condition) {
        // fait ci
    } else {
       // fait ça
       exit;
    }
    Mieux vaut faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!condition) {
        // fait ça
        exit;
    }
    // fait ci

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Grand merci de tes éclaircissements, ca marche parfaitement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. arrondis faux avec QString::number
    Par Somato dans le forum Débuter
    Réponses: 11
    Dernier message: 04/12/2008, 08h57
  2. [DW8] création bouton pour mail avec bon de commande
    Par isa51 dans le forum Dreamweaver
    Réponses: 6
    Dernier message: 12/06/2008, 11h28
  3. [Bash] Expression reguliere avec expr match
    Par cerede2000 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 19/10/2007, 14h41
  4. Requête Vrai-faux avec "ENTRE"
    Par mooh91 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2007, 13h29
  5. requête avec option match
    Par sam01 dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/05/2006, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo