"重新哈希"这是一个好主意。每次登录后都有密码并将新哈希保存到数据库中?在现代安全标准方面,这有什么优点和缺点吗?
这是PHP中的一个最小代码示例:
function login(string $username, string $password): bool {
// function arguments coming from $_POST
$user = User::findByUsername($username);
if($user) {
if(password_verify($password, $user->password)) {
// re-hash password ...
$user->password = password_hash($password, PASSWORD_DEFAULT);
// ... and save it in database
$user->save();
return true;
}
}
return false;
}
答案 0 :(得分:1)
每次成功登录后重新密码都不会增加安全性。
如果函数password_hash()
将使用修复全局salt,则对于相同的密码,哈希看起来完全相同。因此,攻击者甚至不会注意到数据库中的任何差异。
但是,如果使用正确,函数password_hash()
将生成足够长的独特盐,并且使用不同盐的相同密码的几个哈希不会使暴力破坏变得容易。
因此,虽然重组并没有削弱安全性,但它也没有任何帮助,最好是利用时间来增加成本因素。
答案 1 :(得分:-1)
每次登录时都无需重新密码用户密码。它不会改善您的安全性。