为什么我的加盐密码身份验证在我的 MySQL 数据库中不起作用?

Susan Sarandon
发布: 2024-11-13 10:03:02
原创
709 人浏览过

Why is my salted password authentication not working in my MySQL database?

如何使用数据库中的 Salted 密码对用户进行身份验证

在数据库驱动的 Web 应用程序中,保护用户密码免遭未经授权的访问至关重要。加盐密码是一项重要的安全措施,可以增强对用户凭据的保护。在本次问答中,我们将探讨如何从数据库检索和验证加盐密码以进行安全的用户身份验证。

问题:

开发人员实现了一个成员网站的加盐密码存储在 MySQL 数据库中。但是,由于验证会员存在问题,登录页面允许任何人进入会员网站。

检查会员存在的代码:

$servername = 'localhost';
$username = 'root';
$pwd = '';
$dbname = 'lp001';

$connect = new mysqli($servername, $username, $pwd, $dbname);

if ($connect->connect_error) {
    die('connection failed, reason: ' . $connect->connect_error);
}

$name = mysqli_real_escape_string($connect, $_POST['name']);
$password = mysqli_real_escape_string($connect, $_POST['password']);
$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
if ($result === false) {
    die(mysqli_error());
}
$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];

$saltedPW = $password . $salt;
$hashedPW = hash('sha256', $saltedPW);
$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";

if (mysqli_query($connect, $sqlQuery)) {
    echo '<h1>Welcome to the member site ' . $name . '</h1>';
} else {
    echo 'error adding the query: ' . $sql_q . '<br> Reason: ' . mysqli_error($connect);
}
登录后复制

解决方案:

代码中的错误在于成员存在性检查。要根据存储的加盐密码哈希正确验证用户的密码,需要执行以下步骤:

  1. 从数据库检索加盐密码哈希:

    使用 SQL 查询从数据库中获取所提供的加盐密码哈希值用户名。

  2. 计算哈希密码:

    将用户输入的密码与检索到的盐连接起来,并使用与所使用的相同的哈希函数对其进行哈希处理用于将密码存储在

  3. 将哈希密码与存储的哈希进行比较:

    将计算出的哈希密码与存储的加盐密码哈希进行比较。如果匹配,则用户的密码正确。

以下是会员存在检查代码的更新版本,其中包含以下步骤:

$verifyQuery = "SELECT id, password FROM users WHERE name = '$name';";
$verifyResult = mysqli_query($connect, $verifyQuery);
if ($verifyResult === false) {
    die(mysqli_error());
}
$verifyRow = mysqli_fetch_assoc($verifyResult);
if ($verifyRow) {
    $storedHash = $verifyRow['password'];
    $saltedPW = $password . $verifyRow['salt'];
    $hashedPW = hash('sha256', $saltedPW);

    if ($hashedPW === $storedHash) {
        // User authenticated successfully
    } else {
        // Incorrect password
    }
} else {
    // User not found
}
登录后复制

结论:

通过执行以下步骤,开发人员可以根据加盐密码哈希安全地验证用户密码存储在数据库中。这确保了用户凭据的完整性和保护,防止未经授权的访问。

以上是为什么我的加盐密码身份验证在我的 MySQL 数据库中不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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