防止用户在Symfony中使用相同的密码(bcrypt)

时间:2016-05-24 09:37:43

标签: php security passwords symfony

我想阻止用户使用他们在过去3个月内使用的相同密码。

我的第一个方法是创建一个表来存储每个用户的密码历史记录,问题是Symfony使用Bcrypt对密码进行编码,并且每次都以不同方式对其进行哈希处理,所以我简单地比较字符串的想法是行不通的。

有没有办法对未实现UserInterface的实体执行IsPasswordValid?所以我可以检查新密码是否为每个存储的密码返回true ...

欢迎任何其他想法。

我正在使用Symfony 3.0.6,我不愿意使用FOS_User_Bundle,我已经知道如何使用它。

感谢。

1 个答案:

答案 0 :(得分:3)

您希望使用password_verify()查看他们输入的新密码是否与您存储的过去x密码相匹配。

这是一个非常简单的例子;

$oldPassword = password_hash('password', PASSWORD_DEFAULT);
$newPassword = 'password';

if (password_verify($newPassword, $oldPassword)) {
    echo 'Previously used password, please choose another';
}

基本上你只需要提取用户的旧密码,然后循环访问数据,然后对每个旧密码使用password_verify来查看是否匹配 - 如果他们这样做了知道他们使用过以前存储的密码。

作为一个小小的注意事项,如果你想更进一步并进行相似性检查,你必须自己生成所有排列,然后按照旧密码使用密码验证的相同例程对所有排列进行操作。