在太多登录尝试后实施禁止的最佳方式

时间:2012-02-05 22:13:50

标签: php security authentication ip

在我实施自己的禁止太多尝试的系统后的最后2天,我一直在研究这个问题。但我没有找到我正在寻找的正确答案。几乎是,实现这个的最佳方法是什么?

目前我通过IP禁令实现,如果同一IP连续登录错误10次,IP禁止30分钟就可以登录,他们仍然可以浏览网站。但是,如果这种情况发生在人口密集的地区,例如大学校园,这不会有效阻止整个学校的登记吗?

有没有更好的方法来做到这一点,不使用IP地址?我以为我可以用cookie做到这一点,但用户试图暴力破解帐户可能只是在每10次尝试后删除他们的cookie。

3 个答案:

答案 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分钟。

http://webcheatsheet.com/php/blocking_system_access.php