検索

ホームページ  >  に質問  >  本文

Laravel 9はbcryptでハッシュされた有効なパスワードを拒否します

私は、Laravel 9 でのいくつかのパスワード検証エラーのトラブルシューティングに数日を費やしました。パスワード testperson はハッシュ $2y$10$5xc/wAmNCKV.YhpWOfyNoetCj/r3Fs5TyAskgZuIF/LEItWfm7rPW に解決されます。対応するデータベース テーブルを直接クエリすると、これが正しいハッシュ値であることが確認されます。ただし、Laravel の認証インフラストラクチャはこのパスワードを拒否し、認証を拒否します。

これは一般的ではありません。正しく解析できるパスワードが複数あります。たとえば、パスワード eo$2y$10$uNWYvMVmagIwQ2eXnVKLCOAK1QFQdcRtxbvlghf.Xpg0U1w.N./N2 に解決され、Laravel はパスワードを検証します。同じメカニズムで両方のユーザー レコードが作成されますが、権限は異なります (レコードのブール値で示されます)。

関数 password_verify にバグが見つかりました。このスタック オーバーフローの質問とツリーハウス スレッドで偽陰性を返すことが判明しました。

具体的には、これはこの障害ポイントが発生する Laravel のスタックです:

スタック全体を巻き戻した後、ログイン コントローラーの login メソッドで次のコードを実行します。 リーリー

このコンテキストをダンプします:

リーリー

そのパスワードを

SELECT users WHERE password= クエリに入力すると、期待したユーザーが得られます。

これはどうですか?この問題はどうすれば解決できますか?

P粉270842688P粉270842688230日前486

全員に返信(1)返信します

  • P粉464082061

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

    あなたが提供したハッシュが「testperson」ハッシュであるというあなたの主張は、実際には間違っていると思います。ハッシュは一方向であるため、表示されているハッシュがどこから来たのかを伝えることはできません。注: PHP 7.4 では動作しますが、passwd_hash() の Salt オプションが非推奨になっているため、PHP 8 以降では動作しないと思います。

    リーリー

    返事
    0
  • キャンセル返事