2016-04-24 12 views
0

Ich bin verwirrt mit dem neuen PHP ...php Passwort verifizieren, bevor Sie es ändern

Ich schrieb unter Code, aber etwas funktioniert nicht.

Szenario ist zu überprüfen, das Passwort in der DB, wenn das Passwort OK ist, dann sollte die Antwort in Ordnung sein. Wenn nicht, dann stoppe die Suche.

$currentPassword = preg_replace('/\s+/', '', $_POST['currentPassword']); 
    $newPassword = preg_replace('/\s+/', '', $_POST['newPassword']); 
    $ConfirmPassword = preg_replace('/\s+/', '', $_POST['ConfirmPassword']); 
    $oldpass = IrBuscarPassword($_SESSION['user']['username']); 

     $hash = password_hash($oldpass, PASSWORD_BCRYPT, ['cost' => 13]); 

     if (password_verify($currentPassword, $hash)) { 
      // password valid 
      $change = true; 
     } else { 
      $change = false; 
     } 

So ... das ist mein Code jetzt ... ich bin nicht sicher, ob dies der gute Weg ist ... Bitte helfen Sie mir mit diesem ...

if(isset($_POST['currentPassword'])) 
    { 

    $currentPassword = $_POST['currentPassword']; 
    $newPassword = $_POST['newPassword']; 
    $ConfirmPassword = $_POST['ConfirmPassword']; 
    //$saltcode = IrBuscarSalt($_SESSION['user']['username']); 

    $oldpass = IrBuscarPassword($_SESSION['user']['username']); 
    $hash = password_hash($oldpass, PASSWORD_BCRYPT, ['cost' => 13]); 

     if (password_verify($oldpass, $hash)) { 
      // password valid 
      //echo $oldpass; 
      $change = true; 
     } else { echo "bad"; } 
    } 
+0

Holen Sie den Benutzer aus der DB. Überprüfen Sie das mitgelieferte "oldpass" (currentPassword) mit password_verify, wenn es gültig ist, speichern Sie den Hash des neuen Passworts in der Datenbank. Wenn nicht - einen Fehler anzeigen. – JimL

+0

Ich würde den 'preg_replace'-Teil des Codes überspringen, aber Sie müssen wahrscheinlich das alte Passwort verwenden, da der gespeicherte Hash von einem Passwort ohne Leerzeichen kommt. Aber es gibt keinen Grund, die Entropie der neuen Hashes zu begrenzen. – JimL

+0

Das Ändern des Eingabepassworts eines Benutzers ist eine schlechte Idee, weil dann das, was sie eingegeben haben, nicht mit dem übereinstimmt, was als Passwort gespeichert wird. Was ist, wenn der Benutzer absichtlich ein Leerzeichen am Ende seines Passwortes platziert, um einfache Brute-Force-Angriffe abzuwehren? – GordonM

Antwort

0

Hash nicht das alte Passwort vor der Verwendung von password_verify darauf. Sobald Sie verifiziert und die Verifizierung bestanden haben, können Sie sie hashen und fortfahren.

Verwandte Themen