[RESOLU] Requête PDO : Hachage du password avec sha1

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] Requête PDO : Hachage du password avec sha1

Re: [RESOLU] Requête PDO : Hachage du password avec sha1

par moogli » 29 mars 2013, 00:00

:mrgreen: :mrgreen: :mrgreen: :mrgreen:

vire les htmlentites c'est à réserver à l'affichage :)


@+

Re: [RESOLU] Requête PDO : Hachage du password avec sha1

par nico44530 » 28 mars 2013, 21:56

ENFIN RÉSOLUUUS !

Le problème se trouvais dans la page d'inscription, mauvaise variable du mot de passe :
$req1->execute(array('pseudo' => htmlentities($pseudo),'pass' => htmlentities(sha1($_POST['mdp']))
au lieu de :
$req1->execute(array('pseudo' => htmlentities($pseudo),'pass' => htmlentities(sha1($_POST['pass']))

Re: Requête PDO : Hachage du password avec sha1

par nico44530 » 28 mars 2013, 21:14

J'envois mon formulaire en ajax, et peut-être que le hachage est modifié après le passage en ajax ??
Sinon oui, je me souviens forcément du mot de passe :D depuis le temps que je j'essaye de faire fonctionne tout ça ^^

(Non je viens de le faire sans ajax et ça fonctionne pas non plus ^^)

Je met mon formulaire d'inscription, peut-être que ça vient de là :
if (!empty($_POST['prenom']) && !empty($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['sexe']) && !empty($_POST['jour']) && !empty($_POST['mois']) && !empty($_POST['annee']) && !empty($_POST['pseudo']) && !empty($_POST['mdp']) && !empty($_POST['verif_mdp'])) :
	if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail)) :
		$req = $connect->prepare('SELECT pseudo, mail FROM wa_communaute WHERE pseudo = :pseudo OR mail = :mail');
		$req->execute(array('pseudo' => $_POST['pseudo'], 'mail' => $_POST['mail']));
		$result1 = $req->rowCount();
		$req->closeCursor();
		if($result1 == 1) :
			echo '<div class="error-register">Pseudo ou email déjà utilisé</div>';
			elseif ( $mdp != $verif_mdp) :
				echo '<div class="error-register">Les mots de passe ne sont pas identiques !</div>';
			else:
				$req1 = $connect->prepare('INSERT INTO wa_communaute(pseudo,pass,mail,nom,prenom,jour,mois,annee,sexe,partime) VALUES(:pseudo,:pass,:mail,:nom,:prenom,:jour,:mois,:annee,:sexe,NOW())');
				$req1->execute(array('pseudo' => htmlentities($pseudo),'pass' => htmlentities(sha1($pass)),'mail' => htmlentities($mail),'nom' => htmlentities($nom),'prenom' => htmlentities($prenom),'jour' => htmlentities($jour),'mois' => htmlentities($mois),'annee' => htmlentities($annee),'sexe' => htmlentities($sexe)));
				$req1->closeCursor();
				
				$req2 = $connect->prepare('SELECT id FROM wa_communaute WHERE pseudo = :pseudo');
				$req2->execute(array('pseudo' => $pseudo));
				$result = $req2->fetchAll();
				$_SESSION['pseudo'] = $pseudo;
				$_SESSION['id'] = $result['id'];
				setcookie("pseudo", $_POST["pseudo"], time() + 90 * 24 * 60 * 60, "/");
				$req2->closeCursor();
				
				$msg_register = 'Vous êtes désormais inscrit sur Web Astronomie.';
				$req3 = $connect->prepare('INSERT INTO wa_mur (id_membre,poster,date_heure) VALUES (:id_membre,:poster,now())');
				$req3->execute(array('id_membre' => $_SESSION['id'],'poster' => $msg_register));
				$req3->closeCursor();
				
				$entete = 'MIME-Version: 1.0\r\n';
				$entete .= 'Content-type: text/html; charset=iso-8859-1\r\n';
				$entete .= 'From: <$email_admin>\r\n';
				$entete .= 'Reply-To: $email_admin\r\n';
				mail($mail,'Bienvenue sur ' .$nom_site. ' ' . $login .'.' , $message, $entete);
				echo 'OK';
		endif;
	else:
		echo '<div class="error-register">Adresse email incorrecte !</div>';
	endif;
else:
	echo '<div class="error-register">Veuillez remplir tous les champs !</div>';
endif;

Re: Requête PDO : Hachage du password avec sha1

par moogli » 28 mars 2013, 20:51

la chose est claire
en base : da39a3ee5e6b4b0d3255bfef95601890afd80709
formulaire : 6125a508927cea08d8fa692389acbb1158189da2

donc soir tu te te souvient pas du mot de passe, soit il y a une différence entre l'insertion et la vérification :)

@+

Re: Requête PDO : Hachage du password avec sha1

par nico44530 » 28 mars 2013, 19:28

Voici l'affichage du var_dump que j'ai :

Code : Tout sélectionner

|6125a508927cea08d8fa692389acbb1158189da2| array(1) { [0]=> array(4) { ["id"]=> string(1) "1" [0]=> string(1) "1" ["pass"]=> string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709" [1]=> string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709" } }
Et ça ne fonctionne toujours pas, j'ai juste supprimé la ligne :
$_SESSION['id'] = $result['id'];
Voilà le code :
if (!empty($_POST['pseudo']) && !empty($_POST['pass'])) {
	$pseudo = $_POST['pseudo'];
	$pass = sha1($_POST['pass']);
    $req = $connect->query('SELECT id, pass FROM wa_communaute WHERE pseudo = '.$connect->quote($_POST['pseudo']));
    $result = $req->fetchAll();
        echo '|',$pass,'|<br />';
        var_dump($result);
    if(count($result) == 1 && pass== $result[0]['pass']) {
                session_start();
                $_SESSION['id'] = $result[0]['id'];
                $_SESSION['pseudo'] = $_POST['pseudo'];
                echo 'OK';
    }
    else {
        echo '<div class="error-login">Vos identifiants sont incorrects !</div>';
    }
} else {
    echo '<div class="error-login">Veuillez remplir tous les champs !</div>';
}
Merci pour ton aide :)

Re: Requête PDO : Hachage du password avec sha1

par moogli » 28 mars 2013, 19:04

commence simplement par récupérer le mot de passe contenu en base (le select sql) et affiche la valeur ainsi que le résultat du

un exemple de correction de ton code
<?php
require('../include/functions.inc.php');

if (!empty($$_POST['pseudo']) && !empty($$_POST['pass'])) {
	$pass = sha1($_POST['pass']);
    $req = $connect->query('SELECT id, pass FROM wa_communaute WHERE pseudo = '.$connect->quote($_POST['pseudo']);
    $result = $req->fetchAll();
	echo '|',$pass,'|<br />'; // on affiche le sha1 de ce qui a été saisie
	var_dump($result); // on affiche le résultat de ce que la base retourne
    if(count($result) == 1 && pass== $result[0]['pass']) {
		session_start();
		$_SESSION['id'] = $result['id']; // attention $result['id'] n'existe pas le var_dump va te montrer pourquoi
		$_SESSION['pseudo'] = $_POST['pseudo'];
		echo 'OK';
    }
    else {
        echo '<div class="error-login">Vos identifiants sont incorrects !</div>';
    }
} else {
    echo '<div class="error-login">Veuillez remplir tous les champs !</div>';
}
il y a des chances que ton soucis soit plus au niveau de l'utilisation du résultat de la requête que du mot de passe (cf commentaire dans le code).

si tel est le cas il faut impérativement activer l'affichage des erreurs lorsque l'on développe sinon ne s'en sort pas.

@+

Re: Requête PDO : Hachage du password avec sha1

par nico44530 » 28 mars 2013, 15:52

1- Comment on écrit une comparaison php et où l'intégrer dans mon script ?
2- Non je n'ai pas comparé les valeurs
3- Il y a 40 caractères pour le hachage du mot de passe

Merci d'avance pour ton aide

Re: Requête PDO : Hachage du password avec sha1

par moogli » 28 mars 2013, 14:11

Salut,

1/ on ne passe pas le mot de passe dans la requête on compare en php ;)
2/ as-tu comparé les valeurs du sha1 et en base ?
3/ ton champs de mot de passe fait quelle taille ?

@+

Requête PDO : Hachage du password avec sha1

par nico44530 » 28 mars 2013, 04:13

Bonjour,

J'ai un formulaire de connexion et je ne peux pas me connecter seulement avec "sha1".
Pourtant mon password est haché dans ma base de donnée et le type du champ est VARCHAR.
J'ai pourtant essayé beaucoup de solutions :(

Voici mon code :
require('../include/functions.inc.php');

$pseudo = $_POST['pseudo'];
$pass = sha1($_POST['pass']);
 
if (!empty($pseudo) && !empty($pass)) {
    $req = $connect->prepare('SELECT id FROM wa_communaute WHERE pseudo = :pseudo AND pass = :pass');
    $req->execute(array('pseudo' => $pseudo, 'pass' => $pass));
    $result = $req->fetchAll();
    if(count($result) == 1) {
		session_start();
		$_SESSION['id'] = $result['id'];
		$_SESSION['pseudo'] = $pseudo;
		echo 'OK';
    }
    else {
		echo '<div class="error-login">Vos identifiants sont incorrects !</div>';
    }
} else {
    echo '<div class="error-login">Veuillez remplir tous les champs !</div>';
}
Sinon mon code fonctionne mais est-il sécurisé ou non ? Je dois rajouter quoi pour le sécuriser ?

Merci de votre aide ;)