收回用于身份验证的加盐密码
当使用存储在数据库中的加盐密码实现会员站点时,需要仔细注意登录机制。虽然使用加盐密码方法可以增强安全性,但它也会在验证用户凭据方面带来挑战。
问题:
会员登录页面上发生错误,其中任何条目似乎通过了验证用户存在的检查。具体来说, $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中文网其他相关文章!