データベースからソルトされたパスワードを使用してユーザーを認証する方法
データベース駆動の Web アプリケーションでは、ユーザーのパスワードを不正アクセスから保護することが不可欠です。パスワードのソルティングは、ユーザー資格情報の保護を強化する重要なセキュリティ対策です。この Q&A では、安全なユーザー認証のためにデータベースからソルト付きパスワードを取得して認証する方法について説明します。
問題:
開発者がメンバーを実装しました。ソルト付きパスワードが MySQL データベースに保存されているサイト。ただし、メンバーの存在確認に問題があるため、ログイン ページではメンバーシップ サイトへのあらゆるアクセスが許可されています。
メンバーの存在を確認するコード:
$servername = 'localhost'; $username = 'root'; $pwd = ''; $dbname = 'lp001'; $connect = new mysqli($servername, $username, $pwd, $dbname); if ($connect->connect_error) { die('connection failed, reason: ' . $connect->connect_error); } $name = mysqli_real_escape_string($connect, $_POST['name']); $password = mysqli_real_escape_string($connect, $_POST['password']); $saltQuery = "SELECT salt FROM users WHERE name = '$name';"; $result = mysqli_query($connect, $saltQuery); if ($result === false) { die(mysqli_error()); } $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'"; if (mysqli_query($connect, $sqlQuery)) { echo '<h1>Welcome to the member site ' . $name . '</h1>'; } else { echo 'error adding the query: ' . $sql_q . '<br> Reason: ' . mysqli_error($connect); }
解決策:
コードのエラーはメンバーの存在チェックにあります。保存されているソルト付きパスワード ハッシュに対してユーザーのパスワードを正しく検証するには、次の手順が必要です:
データベースからソルト付きパスワード ハッシュを取得します:
SQL クエリを使用して、提供されたデータベースからソルトされたパスワード ハッシュを取得しますusername.
ハッシュされたパスワードを計算します:
ユーザーが入力したパスワードと取得したソルトを連結し、使用したものと同じハッシュ関数を使用してハッシュします。パスワードを保存するためdatabase.
ハッシュ化されたパスワードと保存されたハッシュの比較:
計算されたハッシュ化されたパスワードと保存されたソルト化されたパスワード ハッシュを比較します。一致する場合、ユーザーのパスワードは正しいです。
以下は、次の手順を組み込んだメンバー存在チェック コードの更新バージョンです。
$verifyQuery = "SELECT id, password FROM users WHERE name = '$name';"; $verifyResult = mysqli_query($connect, $verifyQuery); if ($verifyResult === false) { die(mysqli_error()); } $verifyRow = mysqli_fetch_assoc($verifyResult); if ($verifyRow) { $storedHash = $verifyRow['password']; $saltedPW = $password . $verifyRow['salt']; $hashedPW = hash('sha256', $saltedPW); if ($hashedPW === $storedHash) { // User authenticated successfully } else { // Incorrect password } } else { // User not found }
結論:
これらの手順に従うことで、開発者はユーザーのパスワードをソルトされたパスワードと照合して安全に検証できます。データベースに保存されているハッシュ。これにより、ユーザー認証情報の整合性と保護が保証され、不正アクセスから保護されます。
以上がMySQL データベースでソルト付きパスワード認証が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。