首页 >数据库 >mysql教程 >为什么我的加盐密码验证总是返回 True?

为什么我的加盐密码验证总是返回 True?

DDD
DDD原创
2024-12-11 21:35:11866浏览

Why is My Salted Password Authentication Always Returning True?

收回用于身份验证的加盐密码

当使用存储在数据库中的加盐密码实现会员站点时,需要仔细注意登录机制。虽然使用加盐密码方法可以增强安全性,但它也会在验证用户凭据方面带来挑战。

问题:

会员登录页面上发生错误,其中任何条目似乎通过了验证用户存在的检查。具体来说, $result === false 的评估总是返回 false,从而阻止了预期的行为。

解决方案:

问题的根本原因在于方法用于从数据库检索密码哈希。要验证用户凭据,必须首先检索与所提供的用户名相对应的加盐密码哈希:

$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
$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'";

进一步考虑:

验证密码时,使用强密码哈希函数(如 bcrypt 或 Argon2)至关重要,它们提供安全且耗时的功能哈希算法。此外,应使用准备好的语句来防止 SQL 注入攻击。

以上是为什么我的加盐密码验证总是返回 True?的详细内容。更多信息请关注PHP中文网其他相关文章!

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