尝试失败后,我试图阻止登录x分钟。我已经计划记录用户登录,所以我想我可以使用相同的数据库来计算阻塞是否需要发生。
我的问题:
答案 0 :(得分:7)
您需要所谓的密码尝试窗口。
数据库中基本上有2个字段,一个是LastPasswordAttempt(datetime),另一个是PasswordAttemptCount(int)
然后在每次登录时,检查最后一次LastPasswordAttempt发生的时间以及它是否在最后一次说10分钟 - 增加PasswordAttemptCount,否则将其重置为0(或1,因为它们刚刚失败)。
在相同的逻辑中,检查PasswordAttemptCount是否等于5或更多,如果是 - 拒绝用户访问。你可以有一个第三个字段,可以将它们锁定几个小时或一天。
即。 CanLoginAfter(datetime),您可以将其设置为上次尝试密码的一天。
希望这有帮助
答案 1 :(得分:1)
一种方法是这样做:
user_lockout: user_id, expires_dt
(可以是常规用户表的一部分)failed_login_log: user_id, dt
(可能是另一个日志表的一部分)在尝试user_id
的任何登录尝试时,请检查以确保expires_dt
已过去或为NULL。 (如果以后帐户被锁定。)
登录失败后,将记录插入failed_login_log
,然后计算过去X分钟(WHERE dt > DATE_SUB(NOW(), INTERVAL x MINUTES)
)失败登录次数。
如果该计数大于Y,请将user_lockout.expires_dt
更新为NOW() + Z MINUTES
。
这允许您在X分钟内Y尝试失败后将帐户锁定Z分钟。