PHP の passwd_hash() 関数を使用してパスワードをハッシュして保存する場合データベースでは、password_verify() を使用してログイン中にハッシュされたパスワードがどのように検証されるかを理解することが重要です。
コードでは、password_hash() 関数がパスワードを保存する前にハッシュします。それはデータベースにあります。ただし、ログイン スクリプトでは、ユーザーが入力したハッシュ化されていないパスワードと、password_verify() を使用してデータベースに保存されているハッシュ化されたパスワードを直接比較します。この比較は常に失敗します。
password_verify() を使用してパスワードを検証する正しい方法は、ユーザーが入力したハッシュ化されていないパスワードを最初の引数として渡し、ハッシュ化されたパスワードを渡すことです。 2 番目の引数としてデータベースに保存されているパスワード。これにより、password_verify() で 2 つのパスワードを正しく比較できるようになります。
パスワード検証が修正されたログイン スクリプトの修正バージョンは次のとおりです。
<code class="php">if($_SERVER["REQUEST_METHOD"] == "POST"){ $p_num = $_POST["username"]; $pwd = $_POST["password"]; $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'"; $result = mysqli_query($connect, $query); while($row = mysqli_fetch_assoc($result)){ $user_id = $row['user_id']; $first_name = $row['first_name']; $last_name = $row['last_name']; $user_name = $first_name ." " .$last_name; $password = $row['password']; $image = $row['image']; $email = $row['email']; $program = $row['program']; $role = $row['role']; $status = $row['logged_in']; $registered = $row['registered']; // Verify the password using password_verify() if(($user_id == $p_num) && (password_verify($pwd, $password))){ $_SESSION["id"] = $user_id; $_SESSION["user"] = $user_name; $_SESSION["program"] = $program; $_SESSION["pass"] = $password; $_SESSION["image"] = $image; $_SESSION["email"] = $email; $_SESSION["role"] = $role; $_SESSION["status"] = $status; $_SESSION["registered"] = $registered; $loggedin = "UPDATE `$user_table` SET `logged_in` = 1 WHERE `user_id` = '$user_id'"; } var_dump($pwd); var_dump($password); } }</code>
password_verify() を正しく使用すると、ログイン中にユーザーのパスワードを正確に検証でき、システムのセキュリティと整合性が確保されます。
以上がパスワードハッシュをpassword_hash()とpassword_verify()で比較する場合、どちらのパスワードを先にすべきでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。