Heim  >  Fragen und Antworten  >  Hauptteil

Laravel 9 lehnt gültiges, mit bcrypt gehashtes Passwort ab

Ich habe ein paar Tage damit verbracht, einige Fehler bei der Passwortüberprüfung in Laravel 9 zu beheben. Passwort testperson 解析为哈希值 yxc/wAmNCKV.YhpWOfyNoetCj/r3Fs5TyAskgZuIF/LEItWfm7rPW. Eine direkte Abfrage der entsprechenden Datenbanktabelle bestätigt, dass es sich um den korrekten Hashwert handelt. Allerdings lehnt die Authentifizierungsinfrastruktur von Laravel dieses Passwort ab und verweigert die Authentifizierung.

Das ist nicht üblich. Ich habe mehrere Passwörter, die korrekt analysiert werden. Zum Beispiel Passwort eo 解析为 y$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2 und Laravel überprüft dieses Passwort. Derselbe Mechanismus erstellt beide Benutzerdatensätze, obwohl sie unterschiedliche Berechtigungen haben (angezeigt durch einen booleschen Wert im Datensatz).

Ich habe einen Fehler in einer Funktion password_verify gefunden, die in dieser Frage zum Stapelüberlauf und in diesem Treehouse-Thread falsch-negative Ergebnisse zurückgibt.

Konkret handelt es sich hierbei um den Stack in Laravel, bei dem dieser Fehlerpunkt auftritt:

Nachdem ich den gesamten Stapel erweitert habe, führe ich den folgenden Code in der login-Methode des Login-Controllers aus:

$provider = $this->guard()->getProvider();
$credentials =  $this->credentials($request);
$user = $provider->retrieveByCredentials($credentials);
$password_unhashed = $request['password'];
$password_hashed = $user->getAuthPassword();
$password_verify = password_verify($password_unhashed, $password_hashed);
logger('attemping login', compact('password_verify','password_unhashed','password_hashed'));

Diesen Kontext löschen:

{
"password_verify": false,
"password_unhashed": "testperson",
"password_hashed": "yxc/wAmNCKV.YhpWOfyNoetCj/r3Fs5TyAskgZuIF/LEItWfm7rPW"
}

Wenn ich dieses Passwort in die SELECT users WHERE password=-Abfrage eingebe, erhalte ich den Benutzer, den ich erwarte.

Was ist los? Wie kann ich dieses Problem lösen?

P粉270842688P粉270842688228 Tage vor480

Antworte allen(1)Ich werde antworten

  • P粉464082061

    P粉4640820612024-03-29 11:37:34

    我认为您关于您提供的哈希值是“testperson”哈希值的断言实际上是错误的。由于散列是单向的,因此我无法告诉您所显示的散列是从何而来的。注意:它在 PHP 7.4 上运行,但我认为它不会在 PHP 8 及更高版本上运行,因为 passwd_hash() 中的 salt 选项已被弃用。

     10, "salt" => substr($testhash, 7, 22));
    $pwhash = password_hash($password, PASSWORD_BCRYPT, $options);
    echo $pwhash."\n";
    $salt = substr($pwhash, 0, 29);
    echo $salt."\n";
    $cryptpw = crypt($password, $salt);
    echo $cryptpw."\n";
    if (password_verify($password, $cryptpw)) {
      echo("Verified.\n");
    } else  {
      echo("NOT Verified.\n");
    }
    if (password_needs_rehash($cryptpw, PASSWORD_BCRYPT, $options)) {
      echo("Needs rehash.\n");
    } else {
      echo("Doesn't need rehash.\n");
    }
    
    /*
    testperson results...
    $2y$10$5xc/wAmNCKV.YhpWOfyNoeVNPMEcYrxepQeFAssFoAaIYs4WLmgZO
    $2y$10$5xc/wAmNCKV.YhpWOfyNoe
    $2y$10$5xc/wAmNCKV.YhpWOfyNoeVNPMEcYrxepQeFAssFoAaIYs4WLmgZO
    Verified.
    Doesn't need rehash.
    
    eo results...
    $2y$10$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2
    $2y$10$uNWYvMVmagIwQ2eXnVKLCO
    $2y$10$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2
    Verified.
    Doesn't need rehash.
    */
    ?>

    Antwort
    0
  • StornierenAntwort