我知道以前曾经问过这个问题,但我只是想在我们上线之前确定我所拥有的是最新的并且有明显的理由。
我已使用此方法保护密码:
'password' => password_hash($_POST['password'], PASSWORD_DEFAULT)."\n",
这是用于创建新帐户的用户输入表单。我的理解是哈希密码并使用salt serverside来提高安全性。我是否正确地想到这一点或者我错过了什么?
答案 0 :(得分:1)
“我是否正确地想到这一点,或者我错过了什么?”
这不是什么缺失,而是“太多”。
你需要摆脱这里的."\n"
:
'password' => password_hash($_POST['password'], PASSWORD_DEFAULT)."\n",
因为它正在向哈希添加/嵌入隐藏的换行符,并且会在password_verify()
上以静默失败。
您还可以使用trim()
,这是在数据库中插入之前摆脱它的一种方法。但是,最好完全删除它。
这已在手册中的用户提供说明中说明:
使用将换行符
\n
连接到散列末尾的文档中的示例时要小心,即:echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
人们使用连接的换行符存储哈希值,因此password_verify()
将失败。