在MySQL中存储错误密码尝试(可能是明文)的缺点


Cons of Storing Incorrect Password Attempts (possibly as plain-text) in MySQL

作为我正在创建的PHP网站的安全功能,我计划在一个低流量网站的表中记录密码尝试。(正确的密码是加盐的,并以不可逆的加密方式存储。)

在某些情况下,根据用户在时间范围内的尝试次数和他们的位置暂时或永久地阻止用户和ip。

我计划以明文或可逆(非对称)加密的方式存储不正确的用户名和密码。

用户名中有拼写错误的用户可能会存储正确的密码,因此…

这是个糟糕的主意吗?如果有,你会推荐什么?可逆加密?

我倾向于存储不正确的尝试,因为我有兴趣看到不正确的密码机器人使用暴力,所以我可以防止它们的使用。

(我目前禁止用户使用著名的adobe黑客攻击中最常见的100个密码以及其他一些密码)

我想说这很糟糕,因为你说的原因,但也因为许多用户可能有几个他们经常使用的密码,如果他们不记得自己的密码,他们会尝试每一个。

可逆加密也好不到哪里去。任何有权访问密码的人都可能有权访问正在进行解密和加密的任何东西。

我建议完全不要这样做,而是尽量鼓励使用好的密码,而不是阻止使用不好的密码。

您真的需要查看使用了哪些错误密码吗?实际上,在不知道常用密码是什么的情况下,拒绝它们就足够了。

您可以使用常用的单向散列函数,如bcrypt,并存储散列值。对于每个散列值,保留一个计数器来指示它们被使用的频率。您的所有操作,例如阻止用户,都将基于散列密码,而不是普通密码。