ホームページ >データベース >mysql チュートリアル >ソルトされたパスワード認証が常に True を返すのはなぜですか?
認証用のソルト付きパスワードの撤回
データベースに保存されたソルト付きパスワードを使用してメンバー サイトを実装する場合、ログイン メカニズムには細心の注意が必要です。ソルト付きパスワードのアプローチを使用するとセキュリティが強化されますが、ユーザー資格情報の検証に課題が生じる可能性もあります。
問題:
メンバーのログイン ページでエラーが発生します。エントリは、ユーザーの存在を確認するためのチェックに合格したようです。具体的には、$result === false の評価は常に false を返し、予期した動作を妨げます。
解決策:
問題の根本原因はアプローチにあります。データベースからパスワード ハッシュを取得します。ユーザー資格情報を検証するには、まず、指定されたユーザー名に対応するソルト付きパスワード ハッシュを取得する必要があります:
$saltQuery = "SELECT salt FROM users WHERE name = '$name';"; $result = mysqli_query($connect, $saltQuery); $row = mysqli_fetch_assoc($result); $salt = $row['salt'];
ソルトを取得したら、それを使用して指定されたパスワードをハッシュする必要があります:
$saltedPW = $password.$salt; $hashedPW = hash('sha256', $saltedPW);
結果としてハッシュ化されたパスワードは、ユーザーのデータベースを照会するために使用されます。存在:
$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";
さらなる考慮事項:
パスワードを検証するときは、安全で時間のかかる安全性を提供する bcrypt や Argon2 などの強力なパスワード ハッシュ関数を使用することが重要です。ハッシュアルゴリズム。さらに、SQL インジェクション攻撃を防ぐためにプリペアド ステートメントを使用する必要があります。
以上がソルトされたパスワード認証が常に True を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。