首頁  >  問答  >  主體

Laravel 9 拒絕使用 bcrypt 雜湊的有效密碼

我花了幾天時間對 Laravel 9 中某些密碼驗證失敗進行故障排除。密碼 testperson 解析為雜湊值 $2y$10$5xc/wAmNCKV.YhpWOfyNoetCj/r3Fs5TyAskgZuIF/LEItWfm7rPW。對應資料庫表的直接查詢可確認這是正確的雜湊值。然而 Laravel 的身份驗證基礎設施拒絕此密碼並拒絕身份驗證。

這並不普遍。我有多個可以正確解析的密碼。例如,密碼 eo 解析為 $2y$10$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2,且 Laravel 會驗證該密碼。相同的機制會建立這兩個使用者記錄,儘管它們具有不同的權限(由記錄上的布林值指示)。

我找到了函數 password_verify 的錯誤,該函數被確定為在此 Stack Overflow 問題和此 Treehouse 線程中傳回漏報。

具體來說,這是 Laravel 中出現此故障點的堆疊:

展開整個堆疊後,我在登入控制器的 login 方法中執行以下程式碼:

$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'));

轉儲此上下文:

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

如果我將該密碼放入 SELECT users WHERE password= 查詢中,我就會得到我期望的用戶。

這是怎麼回事?我該如何解決這個問題?

P粉270842688P粉270842688178 天前392

全部回覆(1)我來回復

  • 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...
    yxc/wAmNCKV.YhpWOfyNoeVNPMEcYrxepQeFAssFoAaIYs4WLmgZO
    yxc/wAmNCKV.YhpWOfyNoe
    yxc/wAmNCKV.YhpWOfyNoeVNPMEcYrxepQeFAssFoAaIYs4WLmgZO
    Verified.
    Doesn't need rehash.
    
    eo results...
    y$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2
    y$uNWYvMVmagIwQ2eXnVKLCO
    y$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2
    Verified.
    Doesn't need rehash.
    */
    ?>

    回覆
    0
  • 取消回覆