登录后在数据库中保存新密码哈希

时间:2018-04-10 12:31:43

标签: php security passwords bcrypt password-hash

"重新哈希"这是一个好主意。每次登录后都有密码并将新哈希保存到数据库中?在现代安全标准方面,这有什么优点和缺点吗?

这是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;
}

2 个答案:

答案 0 :(得分:1)

每次成功登录后重新密码都不会增加安全性。

如果函数password_hash()将使用修复全局salt,则对于相同的密码,哈希看起来完全相同。因此,攻击者甚至不会注意到数据库中的任何差异。

但是,如果使用正确,函数password_hash() 生成足够长的独特盐,并且使用不同盐的相同密码的几个哈希不会使暴力破坏变得容易。

因此,虽然重组并没有削弱安全性,但它也没有任何帮助,最好是利用时间来增加成本因素​​。

答案 1 :(得分:-1)

每次登录时都无需重新密码用户密码。它不会改善您的安全性。