验证用户登录时,首先搜索用户名是否安全,如果找到则是,那么检索散列密码和盐并将其与用户输入进行比较?
或者,如果用户输入的用户名的salt是自己检索的,那么请使用输入的密码进行哈希处理并与数据库中的最终哈希进行比较?
从本质上讲,在知道用户输入的密码是否有效之前,是否可以安全地从数据库中存储输入用户名的密码?
答案 0 :(得分:2)
如果您查看PHP密码散列API https://github.com/ircmaxell/password_compat的示例,答案是:不,您从数据库中读取用户并将存储的密码散列与您从登录表单中获得的密码进行比较。
请尝试使用这个库 - PHP 5.5本身将支持这些功能,如果您使用的是PHP 5.3.7及更高版本,那么重新发明轮子并简单地使用这些功能听起来是个好主意。做自己的事情更容易被攻击。
答案 1 :(得分:1)
您可以同时检查登录名和密码。获取原始密码;加盐,然后检查是否存在盐渍密码和用户名组合。当然,db中的密码应该已经加盐并散列过。
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";
}