验证数据库登录中的加盐密码
开发会员网站时,保护登录凭据至关重要。一个重要的方面是实现加盐密码,它通过在散列密码之前向密码添加随机字符串来增强密码保护。
问题:
在提供的代码中,尽管密码输入不正确,但登录页面中的错误允许任何成员访问该网站。这表明密码有效性检查存在问题。
答案:
要验证加盐密码,我们无法直接将输入的密码与存储的哈希进行比较。相反,我们必须:
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中文网其他相关文章!