php - 登录尝试次数过多后实现禁令的最佳方法

标签 php security authentication ip

<分区>

在我实现自己的系统以禁止太多尝试后的过去两天里,我一直在研究这个问题。但我还没有找到我正在寻找的正确答案。大致就是,实现它的最佳方法是什么?

目前我是通过IP封禁来实现的,如果同一个IP连续登录错误10次,封禁IP 30分钟不能登录,仍然可以浏览网站。但是,如果这发生在人口密集的区域,例如大学校园,这是否会有效地阻止整个学校签到?

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

最佳答案

创建名为“failed_logins”的 mysql 表,其中包含两个字段,一个“用户”字段/外键和一个“时间戳”字段。

当用户成功登录时,删除该用户的所有“failed_logins”行。

当用户登录失败时,使用当前时间戳为该用户在“failed_logins”中创建一个新行。

在给定用户的每次登录尝试中,在检查密码是否正确/不正确之前:

  • 运行查询,删除所有早于 15 分钟的“failed_logins”行(例如)。

  • 运行一个查询,检查尝试登录的用户在 failed_logins 中的行数。如果 >= 5(例如),终止登录尝试,通知用户他们的帐户已被锁定并稍后再试。

结果: 用户在 15 分钟内尝试登录失败 5 次后将被锁定其帐户。

关于php - 登录尝试次数过多后实现禁令的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153554/

相关文章:

php - 三元运算符变量和mysql?

ios - 如何防止ipa文件/iphone应用程序被破解到源码?

authentication - 如何确定使用哪个 ServiceStack AuthProvider

python - 使用 django-cas 和 django-mama-cas 设置单点登录

php - 我如何在字符串行中输出我的相关错误

php - 提交后重新填写表单而无法操作代码

asp.net-mvc - Asp.net Mvc自定义机制来处理未经授权的请求

perl - 如何使用Net::OpenSSH安全地写入远程文件

.net - 从.net程序登录delphi程序

php - Composer - 如何使存储库的子组件可安装?