我正在为用户密码部署一种经典的哈希保护机制。在登录时,提交的密码会被加盐、散列化,然后与已存储在数据库中的散列值进行比较。
但是,与其使用 PHP 函数调用来比较现在已经散列化的用户输入和存储的散列值不同,比较是在数据库中完成的,更确切地说,是使用一个 WHERE
子句(注意:由于各种原因,此时已经知道了盐,但尚未知道密码)。
由于用户名是唯一的,因此以下查询有效地确定用户名+密码是否匹配:
SELECT * FROM `users` WHERE `password`='$password_hash' AND `username`='$username';
这种方法是否容易受到时间攻击的影响?
编辑:不必担心SQL注入问题,已经得到解决。