2016-09-14 5 views
-1

Es ist das erste Mal, dass ich PHP native Passwortfunktionen in meiner Anwendung verwende. Ich habe das Passwort des Benutzers mit folgendem Code gespeichert:password_verify() oder Hash-Benutzereingabe mit gespeichertem Passwort in PHP vergleichen?

password_hash($this->input->post('password'),PASSWORD_BCRYPT); 

Und das Ergebnis ist in der Datenbank gespeichert. Jetzt möchte ich den Benutzer im Anmeldevorgang überprüfen.

Meine Frage ist hier. Ich habe 2 Möglichkeiten:

Methode 1

$sql = "SELECT id,password FROM tbl_members WHERE email = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]')); 
if ($result->num_rows()) { 
    $row = $result->row(); 
    $hash = $row->password; 
    if (password_verify($this->input->post('password'), $hash)) echo 'Successful login'; 
} 

Methode 2

$hash = password_hash($this->input->post('password'),PASSWORD_BCRYPT); 
$sql = "SELECT id FROM tbl_members WHERE email = ? AND password = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]',$user_hashed_password)); 
if ($result->num_rows()) echo 'Successful Login'; 

Welche Methode besser geeignet für einen Login-Prozess ist?

+0

Einer ist anfällig für Timing-Angriffe der andere ist nicht. Die API wird aus einem bestimmten Grund bereitgestellt. Benutze es. – PeeHaa

+1

@PeeHaa Eigentlich ... einer * funktioniert *, und der andere nicht ... – deceze

+0

passwort_hash ist sicherer für mich, – Beginner

Antwort

-1

Die erste Methode ist die beste, und ist so, wie sie verwendet werden sollte. Die Verschlüsselung, das Salz usw. werden in der Hash-Zeichenfolge gespeichert. Wenn Sie also Ihre Verschlüsselung ändern, sind die alten gespeicherten Hashes noch gültig, und Sie müssen nicht mehr nur den Hash und den Algorithmus speichern.

Verwandte Themen