我尝试在 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/