[RESOLU] soucis avec password_verify

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] soucis avec password_verify

Re: soucis avec password_verify

par bob60 » 27 avr. 2015, 19:02

Le problème est résolu. Merci à tous ceux qui ont prit le temps de me proposer des solutions.

RÉSOLU.

Re: soucis avec password_verify

par @rthur » 27 avr. 2015, 18:57

Bonjour,

C'est normal, dès que tu appelles un header('location...') ça fait la redirection, il ne doit pas y avoir de echo avant, ni après.
Si tu veux afficher un message 2 solutions :
- soit tu affiches ton message avec un lien et une redirection en javascript après quelques secondes à la place de ton header('location...')
- soit tu passes un paramètre à ta page index.php qui affichera un message d'erreur si elle voit le paramètre en question.
Par exemple :
header('Location: index.php?error=mdp');
et dans ta page index.php
<html>
<!-- ... ton code HTML ... -->
<?php
if ($_GET['error']==='mdp') print "<h3>Erreur : Mot de passe incorrect !</h3>";
?>
<!-- ... la suite de ton code HTML ... -->


Par ailleurs, je te recommande fortement pour éviter les erreurs de mettre après chaque header('location...') un appel à la fonction exit; pour être sûr de ne plus rien exécuter ensuite et que la redirection se passe bien :
header('Location: aze/index.php');
exit;

Re: soucis avec password_verify

par bob60 » 27 avr. 2015, 18:35

Merci Ryle, grâce à toi cela fonctionne avec ta première solution.

Par contre, si le mot de passe est incorrect il ne m'affiche plus le message d'erreur.
Voici le code :
if (password_verify($passe_admin, $verif['mdp']) == true)
			{
				
				header('Location: aze/index.php');
				
			}
			else
			{
				echo 'Mot de passe incorrect.';
				header('Location: index.php');
				exit;
				
			}

Re: soucis avec password_verify

par Ryle » 26 avr. 2015, 10:01

Je crois que tu as un problème de logique dans ta page de connexion... Quand tu vas chercher en base la correspondance tu utilises cette requête avec le mot de passe spécifié par l'utilisateur :
$passe_admin = htmlspecialchars(trim($_POST['pass']));
...
$connexion_accepter = $connexion_base_de_donnees->prepare("SELECT * FROM admin WHERE mdp = :pass");
$connexion_accepter->bindParam(':pass', $passe_admin);
Le problème, c'est qu'en base, ce n'est pas le mot de passe de l'utilisateur que tu as stocké, mais le hash :
$passe_admin = htmlspecialchars(trim($_POST['pass']));
$hash = password_hash($passe_admin, PASSWORD_BCRYPT, ['cost' => 12]);
...
$connexion_accepter = $connexion_base_de_donnees->prepare("INSERT INTO admin (mdp) VALUES (:pass)");
$connexion_accepter->bindParam(':pass', $hash);
Ton select ne va donc trouver aucune correspondance et la comparaison de valeur ne donnera rien.


Dans la logique il faudrait soit que fasses une requête basée sur le login pour ramener le mot de passe crypté, et faire ensuite ta verif; ou bien crypter le mot de passe spécifié par l'utilisateur avant de faire la requête (auquel cas tu fais la comparaison en SQL et contrôle qu'il y a bien des résultats) :)

Re: soucis avec password_verify

par bob60 » 26 avr. 2015, 09:39

Je n'ai toujours pas trouvé de solution à mon problème.

Quelqu'un aurait autre chose à me proposer ?

Re: soucis avec password_verify

par bob60 » 25 avr. 2015, 10:18

Normale que cette requete ne fonctionne pas
SELECT * FROM `admin` WHERE `mdp` = '$2y$12$' puisque je ne prend pas le mot de passe en entier.

Donc ça ne vient pas de la.

Autant pour moi.

Re: soucis avec password_verify

par bob60 » 25 avr. 2015, 10:12

Le soucis vient probablement du hashage du mot de passe....
Dans ma base de données j'ai comme identifiant bob et mel et voici le début des mots de passe hashé par password_hash $2y$12$
Dans phpmyadmin quand je réalise cette requête :

SELECT * FROM `admin` WHERE `id_admin` = 'bob' => resultat ok (identique pour mel)

Par contre quand je fais cela

SELECT * FROM `admin` WHERE `mdp` = '$2y$12$' => la requête m'affiche aucun résultat alors qu'elle devrait m'afficher bob et mel

Avez_vous une idée à partir de ses informations ?

Re: soucis avec password_verify

par bob60 » 25 avr. 2015, 09:53

Voici le même code php que j'ai réaliser pour récupérer le pseudo dans la base de données :
<?php
if (isset($_POST['connexion']))
{
	if (empty($_POST['login']))
	{
		echo 'Le login est vide.';
	}
	else
	{
		$passe_admin = htmlspecialchars(trim($_POST['login']));
		
		$connexion_base_de_donnees = new PDO('connexion base de données');
		$connexion_base_de_donnees->exec('SET NAMES utf8');
		
		if (!$connexion_base_de_donnees)
		{
			echo '<font color="red">La connexion au serveur rencontre des difficultées.</font>';
			
		}
		else
		{
			$connexion_accepter = $connexion_base_de_donnees->prepare("SELECT * FROM admin WHERE id_admin = :login");
			$connexion_accepter->bindParam(':login', $passe_admin);
			
			$connexion_accepter->execute();
			
			$verif = $connexion_accepter->fetch();
			if ($verif['id_admin'] == $passe_admin)
			{
				header('Location: aze/index.php');
				
			}
			else
			{
				echo 'Cest pas bon.';
				
			}
		}
	}
}
Ce code ci fonctionne. Il est identique à celui pour récupérer le mot de passe, à une chose près de l'utilisation de password_verify

Re: soucis avec password_verify

par sirakawa » 25 avr. 2015, 09:11

Si
$verif = $connexion_accepter->fetch();
var_dump ($verif);
donne false; il faut chercher l'erreur avant

Re: soucis avec password_verify

par bob60 » 24 avr. 2015, 20:30

Tu veux je reprenne les lignes du code une à une pour voir à quel moment ça 'bug' ? Et en utilisant des echo, var_dump et print_r ?

Re: soucis avec password_verify

par tof73 » 24 avr. 2015, 20:26

il faut d'abord vérifier si la requete retourne des résultats, ce qui n'est pas le cas si cela afiche false.

Re: soucis avec password_verify

par bob60 » 24 avr. 2015, 20:21

j'ai fait comme tu m'as dit : $verif = $connexion_accepter->fetch();
var_dump($verif);

ca m'affiche : boolean false

Re: soucis avec password_verify

par sirakawa » 24 avr. 2015, 19:45

$verif = $connexion_accepter->fetch();
var_dump ($verif);

Re: soucis avec password_verify

par bob60 » 24 avr. 2015, 16:48

Je ne sais pas si le problème vient d'ici, mais quand je fais : var_dump($verif['mdp']); cela m'affiche null
Je réalise un var_dump à cet endroit du code :
....
$connexion_accepter->execute();
			
			$verif = $connexion_accepter->fetch();
			$verif_mdp = password_verify($passe_admin, $verif['mdp']);
			var_dump($verif['mdp']);
			
			if ($verif_mdp == true)
....

Re: soucis avec password_verify

par bob60 » 24 avr. 2015, 13:41

Re,

J'ai essayé en enlevant htmlspecialchars, ça ne fonctionne pas.

J'ai créer un mot de passe 123456789 puis utiliser var_dump, j'ai cliqué sur connexion et ça m'affiche 123456789, mais ça ne fonctionne toujours pas. ça affiche mon echo pour le message d'erreur.

Aucune des deux solution ne fonctionne.

Autre solution...?