在验证用户登录时,首先搜索用户名是否安全,然后如果找到,检索散列密码和盐并将其与用户输入进行比较?
或者,是否应该自行检索用户输入用户名的盐值,然后与输入的密码进行哈希处理,并与数据库中的最终哈希值进行比较?
本质上,在知道用户输入的密码是否有效之前,从数据库中为输入的用户名存储密码是否安全?
如果您查看 PHP 密码哈希 API https://github.com/ircmaxell/password_compat的示例,答案是:不,您从数据库中读取用户并将存储的密码哈希与您刚刚从登录表单。
请尝试使用这个库 - PHP 5.5 将原生支持这些函数,如果您使用的是 PHP 5.3.7 及更高版本,那么不要重新发明轮子并简单地使用这些函数,这听起来是个好主意。做自己的事更容易受到攻击。
您可以同时检查登录名和密码。获取原始密码;加盐,然后检查加盐密码和用户名组合是否存在。当然,数据库中的密码之前应该已经过加盐和散列。
if($loginname AND $loginpass){
$loginpass=sha1($salt1.$loginpass.$salt2,$raw_output=false );
$userinfo_query="SELECT * FROM users WHERE user_name='$loginname' AND user_pass='$loginpass' LIMIT 1";
}