在我实施自己的禁止太多尝试的系统后的最后2天,我一直在研究这个问题。但我没有找到我正在寻找的正确答案。几乎是,实现这个的最佳方法是什么?
目前我通过IP禁令实现,如果同一IP连续登录错误10次,IP禁止30分钟就可以登录,他们仍然可以浏览网站。但是,如果这种情况发生在人口密集的地区,例如大学校园,这不会有效阻止整个学校的登记吗?
有没有更好的方法来做到这一点,不使用IP地址?我以为我可以用cookie做到这一点,但用户试图暴力破解帐户可能只是在每10次尝试后删除他们的cookie。
答案 0 :(得分:6)
使用两个字段创建名为“failed_logins”的mysql表,“用户”字段/外键和“时间戳”字段。
当用户成功登录时,删除该用户的所有“failed_logins”行。
如果用户登录失败,请使用当前时间戳为该用户在“failed_logins”中创建一个新行。
在给定用户的每次登录尝试时,在检查密码是否正确/不正确之前:
运行查询,删除超过15分钟的所有“failed_logins”行(例如)。
运行查询,检查fail_logins中尝试登录的用户的行数。如果> = = 5(例如),请终止登录尝试,通知用户他们已被锁定在帐户之外,并在一段时间内重新尝试。
结果: 在15分钟内登录尝试失败5次后,用户将被锁定在帐户之外。
答案 1 :(得分:4)
我曾经遵循过的方法类似于我在银行电子银行页面上遇到的方法。它禁止进一步登录每个帐户增加的时间,例如5次尝试,例如等待10秒,1分钟,5分钟,15分钟,然后30分钟。 攻击者通常以特定帐户为目标。还应该有一个应用于每个IP地址的全局规则,它会在一定次数的尝试后锁定登录,这些尝试必须大于5,比如说10。除了这两个规则之外,您还可以比较浏览器和cookie等以提高容忍度。< / p>
答案 2 :(得分:-6)
有时您需要为受密码保护的网站添加额外保护。本文介绍了在三次登录尝试失败后如何限制对登录页面的访问。此模式使用访问者IP地址在数据库中存储日志尝试,并在第三次尝试失败后阻止访问登录功能30分钟。