ホームページ > データベース > mysql チュートリアル > データベース ログイン システムでソルトされたパスワードを安全に検証するにはどうすればよいですか?

データベース ログイン システムでソルトされたパスワードを安全に検証するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-17 08:45:25
オリジナル
645 人が閲覧しました

How Do I Securely Verify Salted Passwords in a Database Login System?

データベース ログインでのソルトされたパスワードの検証

メンバーシップ サイトを開発する場合、ログイン資格情報を保護することが重要です。重要な側面の 1 つは、ソルト付きパスワードを実装することです。これは、パスワードをハッシュする前にランダムな文字列をパスワードに追加することでパスワード保護を強化します。

問題:

提供されたコードでは、ログイン ページのエラーにより、パスワードが正しく入力されていないにもかかわらず、メンバーはサイトにアクセスできます。これは、パスワードの有効性のチェックに問題があることを示しています。

回答:

ソルト付きパスワードを検証するために、入力されたパスワードと保存されているハッシュを直接比較することはできません。代わりに、

  • ユーザー名による検索を使用してデータベースからパスワード ハッシュを取得します。
  • password_verify() 関数を使用して、入力されたパスワードと取得したハッシュを比較します。この関数は、比較のためにハッシュからソルトとコスト要素を抽出します。

mysqli のサンプル コード:

$mysqli = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);

// Find the stored password hash in the db
$sql = 'SELECT password FROM users WHERE username = ?';
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();

// Check if user exists and fetch the hash
$isPasswordCorrect = false;
$stmt->bind_result($hashFromDb);
if ($stmt->fetch() === true) {
    $isPasswordCorrect = password_verify($_POST['password'], $hashFromDb);
}
ログイン後にコピー

サンプル コードPDO:

$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
$pdo = new PDO($dsn, $dbUser, $dbPassword);

// Find the stored password hash in the db
$sql = 'SELECT password FROM users WHERE username = ?';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, $_POST['username'], PDO::PARAM_STR);
$stmt->execute();

// Check if user exists and fetch the hash
$isPasswordCorrect = false;
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
    $hashFromDb = $row['password'];
    $isPasswordCorrect = password_verify($_POST['password'], $hashFromDb);
}
ログイン後にコピー

このプロセスに従うことで、効果的に次のことができます。ログイン ページでソルト付きパスワードを検証し、メンバー サイトのセキュリティを確保します。

以上がデータベース ログイン システムでソルトされたパスワードを安全に検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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