首页 >数据库 >mysql教程 >如何安全地验证数据库登录系统中的加盐密码?

如何安全地验证数据库登录系统中的加盐密码?

Barbara Streisand
Barbara Streisand原创
2024-12-17 08:45:25651浏览

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

验证数据库登录中的加盐密码

开发会员网站时,保护登录凭据至关重要。一个重要的方面是实现加盐密码,它通过在散列密码之前向密码添加随机字符串来增强密码保护。

问题:

在提供的代码中,尽管密码输入不正确,但登录页面中的错误允许任何成员访问该网站。这表明密码有效性检查存在问题。

答案:

要验证加盐密码,我们无法直接将输入的密码与存储的哈希进行比较。相反,我们必须:

  • 使用用户名搜索从数据库中获取密码哈希。
  • 使用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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn