Utilisation du hachage de mot de passe avec sha1

Steph54321
Invité n'ayant pas de compte PHPfrance

15 févr. 2012, 16:19

Bonjour,

Je débute en php et je bute sur un problème : Je cherche à récupérer dans ma page de login un mot de passe haché dans la base de données à l'aide de sha1.
Malgré mes recherches sur google, ça ne marche pas. Voilà le code php :

Code : Tout sélectionner

<? include("../config/config.php"); // on se connecte à MySQL $db = mysql_connect($host, $login_host, $pass_host); // on seléctionne la base mysql_select_db($hostname,$db); $ret = sha1($_POST['password']); if(isset($_POST) && !empty($_POST['login']) && !empty($ret)) { extract($_POST); // on recupère le password de la table qui correspond au login du visiteur $sql = "select password from hela_secu where login='".$login."'"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $data = mysql_fetch_assoc($req); if($data ['password'] != $password) { echo '<p>Mauvais login / password. Merci de recommencer</p>'; include('login.php'); // On inclut le formulaire d'identification exit; } else { session_start(); $_SESSION['login'] = $login; echo 'Vous etes bien logué'; // ici vous pouvez afficher un lien pour renvoyer // vers la page d'accueil de votre espace membres } } else { echo '<p>Vous avez oublié de remplir un champ.</p>'; include('login.php'); // On inclut le formulaire d'identification exit; } ?>
Merci

Eléphant du PHP | 209 Messages

15 févr. 2012, 17:35

if($data ['password'] != $password) {
Il faut que tu hashes ton mot de passe pour le comparer à celui déjà hashé qui provient de ta base (l'inverse n'est pas possible).
if($data ['password'] != sha1($password)) {

Et tu peux supprimer cette ligne là pour le coup :
$ret = sha1($_POST['password']);

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 févr. 2012, 17:56

Ajoute mysql_real_escape_string pour protéger $login afin d'éviter une faille SQL.

Pourquoi un extract ?
C'est plus clair d'utiliser $_POST pour connaître l'origine de l 'infos.

Isset $_ POST est inutile car cette variable existe toujours.

Par contre un isset sur le champ password est nécessaire pour éviter les problèmes.

@+
Il en faut peu pour être heureux ......

Steph54321
Invité n'ayant pas de compte PHPfrance

15 févr. 2012, 18:01

Salut Shenryu,

Merci pour ta réponse, j'ai remplacé la ligne concernée :
// on se connecte à MySQL 
$db = mysql_connect($host, $login_host, $pass_host);  

// on seléctionne la base 
mysql_select_db($hostname,$db);

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) {// ok

extract($_POST);

  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from hela_secu where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

    if($data ['password'] != sha1($password))  {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('login.php'); // On inclut le formulaire d'identification

  }
  else {
    session_start();
    $_SESSION['login'] = $login;
    
    echo 'Vous etes bien logué'; ...
Et du coup, lorsque je rentre le login et le mot de passe et que je valide, j'ai le message d'erreur "Mauvais login".
Il y a surement un autre problème dans le script qui fait que je n'arrive pas à m'identifier, mais je ne vois pas...

Steph54321
Invité n'ayant pas de compte PHPfrance

15 févr. 2012, 18:15

J'ai retiré l'extract et ajouté un mysql_real_escape_string :
if(isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])) {

  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from hela_secu where login='".mysql_real_escape_string($login)."'";
Depuis, j'ai ce message d'erreur :

Notice: Undefined variable: login in /homez.504/.../ver.php on line 13

Notice: Undefined variable: password in /homez.504/.../ver.php on line 18

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 févr. 2012, 09:36

ben $_POST['login'] et $_POST['password'] ^^

@+
Il en faut peu pour être heureux ......