2017-02-03 3 views
-4

en faisant un tutorial sur la façon de créer un formulaire de connexion php mysql. maintenant le tutoriel est actuellement fait pour bien et je voudrais changer un peu et changer le mot de passe de connexion pour stocker cleartext au lieu du hachage. la ligne de hachage ressemble à ceci:changer le mot de passe utilisateur de la fonction de stockage de hachage à cleartext

$new_password = password_hash($upass, PASSWORD_DEFAULT); 

i fait:

$new_password = $upass; 

hors de lui. et il enregistre maintenant le texte en clair dans la base de données, mais la connexion ne fonctionne pas.

la partie de connexion ressemble à ceci et je ne vois pas la partie où j'attends le mot de passe haché à convertir et adapté ...

public function doLogin($uname,$upass) 
    { 
     try 
     { 
      $stmt = $this->conn->prepare("SELECT user_id, user_name, user_pass FROM users WHERE user_name=:uname"); 
      $stmt->execute(array(':uname'=>$uname)); 
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
      if($stmt->rowCount() == 1) 
      { 
       if(password_verify($upass, $userRow['user_pass'])) 
       { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
     catch(PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 
    } 
+4

Le stockage des mots de passe au format texte est __absolument non sécurisé__. Donc, si vous voulez utiliser les meilleures pratiques - oubliez le texte brut. –

+0

"Je voudrais changer un peu et changer le mot de passe de connexion pour stocker le texte en clair". Ce n'est pas quelque chose que vous voudriez faire dans un vrai projet, donc je recommande de ne pas l'utiliser pour un exercice. –

+0

... pourquoi conservez-vous des mots de passe en texte clair? – nerdlyist

Répondre

1

Si vous n'êtes pas hachant les mots de passe plus alors vous ne pouvez vérifier le hachage

if(password_verify($upass, $userRow['user_pass'])) 

Devrait être

if($upass == $userRow['user_pass']) 

Comprendre que c'est une très mauvaise idée . Vous pourriez ne pas comprendre why hashing passwords is important

Pour quelque raison que ce soit, votre base de données pourrait être compromise et ses données pourraient être obtenues par quelqu'un d'autre. Si les mots de passe sont dans ce que nous appelons du texte brut, vous aurez divulgué une information confidentielle dont vos utilisateurs vous ont fait confiance: leur mot de passe (qui est très probablement un mot de passe partagé dans plusieurs services). C'est un problème très sérieux.

1

La ligne:

if(password_verify($upass, $userRow['user_pass'])) 

Vérifie le hash du mot de passe par rapport au mot de passe donné. Lorsque vous avez supprimé la fonction de hachage, vous comparez un mot de passe non haché à un mot de passe en clair.

Modifier à:

if($upass == $userRow['user_pass']) 

Cela devrait corriger.

Bien que vous vraiment ne devrait pas stocker des mots de passe en clair.

+0

merci! ça marche! C'est seulement pour un test, donc je m'en fous et le travail ne sera jamais en ligne .. – novski

+1

C'est bien, mais c'est une bonne habitude de prendre l'habitude d'utiliser des hachages – ScottSmudger