php - X 次尝试失败后阻止登录

标签 php mysql authentication statistics

我尝试在 y 次尝试失败后阻止登录 x 分钟。我已经计划记录用户登录,所以我想我可以使用相同的数据库来计算是否需要进行阻止。

我的问题:

  • 使用相同的日志表来运行阻止 y 次失败尝试的逻辑是否有意义?
  • 有些人有一个专门用于失败尝试的表格,我听说他们只是增加失败登录次数。这没有意义,因为它们存储的只是失败尝试的次数,而不是在什么时间段内。 10 分钟内 3 次失败尝试与 3 天内 3 次失败尝试不同。时间跨度重要吗?您是在 x 次尝试失败后阻塞,还是在 y 时间间隔内尝试 x 次失败后阻塞。最好的时间框架是什么?
  • 有人可以阐明对此的最佳实践方法吗?

最佳答案

您需要所谓的密码尝试窗口。

数据库中基本上有2个字段,一个LastPasswordAttempt(datetime)和PasswordAttemptCount(int)

然后在每次登录时,检查最后一次 LastPasswordAttempt 发生的时间,以及它是否在最近 10 分钟内 - 增加 PasswordAttemptCount,否则将其重置为 0(或 1,因为它们刚刚失败)。

以相同的逻辑,检查 PasswordAttemptCount 是否等于或大于 5,如果是 - 拒绝用户访问。您可以使用第三个字段将它们锁定几个小时或一天。

即CanLoginAfter(datetime),您可以将其设置为从上次密码尝试算起的一天。

希望对你有帮助

关于php - X 次尝试失败后阻止登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176515/

相关文章:

php - PHP 中的字符串切片/字符串操作

php - 从没有 ID 号的特定行开始?

php - Laravel,在保存过程中创建额外记录的特征?

MySQL JOIN 查询 -

mysql - 将数据库信息传递到已选择的行上的 Vb.net

Java 玩吧! 2 - 身份验证没有意义

javascript - 使用 Angular + Play 框架 (Java) 进行 SPA 身份验证

javascript - 如何使用 Apollo 实现突变的 auth 指令?

php - 如何检查是否启用了 allow_url_fopen

php - 如何在 MySQL 数据库中存储 JSON 字符串