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

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

Barbara Streisand
发布: 2024-12-17 08:45:25
原创
648 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板