データベース ログインでのソルトされたパスワードの検証
メンバーシップ サイトを開発する場合、ログイン資格情報を保護することが重要です。重要な側面の 1 つは、ソルト付きパスワードを実装することです。これは、パスワードをハッシュする前にランダムな文字列をパスワードに追加することでパスワード保護を強化します。
問題:
提供されたコードでは、ログイン ページのエラーにより、パスワードが正しく入力されていないにもかかわらず、メンバーはサイトにアクセスできます。これは、パスワードの有効性のチェックに問題があることを示しています。
回答:
ソルト付きパスワードを検証するために、入力されたパスワードと保存されているハッシュを直接比較することはできません。代わりに、
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 サイトの他の関連記事を参照してください。