ホームページ > バックエンド開発 > PHPチュートリアル > MySQL データベースでソルト付きパスワード認証が機能しないのはなぜですか?

MySQL データベースでソルト付きパスワード認証が機能しないのはなぜですか?

Susan Sarandon
リリース: 2024-11-13 10:03:02
オリジナル
796 人が閲覧しました

Why is my salted password authentication not working in my MySQL database?

データベースからソルトされたパスワードを使用してユーザーを認証する方法

データベース駆動の 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);
}
ログイン後にコピー

解決策:

コードのエラーはメンバーの存在チェックにあります。保存されているソルト付きパスワード ハッシュに対してユーザーのパスワードを正しく検証するには、次の手順が必要です:

  1. データベースからソルト付きパスワード ハッシュを取得します:

    SQL クエリを使用して、提供されたデータベースからソルトされたパスワード ハッシュを取得しますusername.

  2. ハッシュされたパスワードを計算します:

    ユーザーが入力したパスワードと取得したソルトを連結し、使用したものと同じハッシュ関数を使用してハッシュします。パスワードを保存するためdatabase.

  3. ハッシュ化されたパスワードと保存されたハッシュの比較:

    計算されたハッシュ化されたパスワードと保存されたソルト化されたパスワード ハッシュを比較します。一致する場合、ユーザーのパスワードは正しいです。

以下は、次の手順を組み込んだメンバー存在チェック コードの更新バージョンです。

$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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート