在多次登录尝试失败后对用户进行计时


Timing a user out after to many unsuccessful login attempts

我正在为我的CMS页面创建一个锁定系统。这个想法是在 24 小时内将用户在 5 次错误尝试后超时,持续 48 小时。但是,如果用户在 24 小时内输入了正确的密码,则应删除超时帐户。我在成功尝试和失败尝试后超时和解锁用户帐户时遇到问题。

这个想法是在失败的尝试和超时发生后,如果他们正确输入密码,它会取消超时。如果他们在 24 小时内(超时后)再次输入错误的密码,则会忽略以前的错误尝试,并且只会在上次成功尝试后查看最近一次失败的尝试。

我创建了一个表来存储不成功的尝试。我需要帮助让代码检查最近 5 次连续失败的尝试>使帐户超时。 然后,如果用户输入正确的密码(在 24 小时内),>删除超时。

    $qry = "    SELECT 
                                CASE WHEN count(*) >= 5 THEN 0 ELSE 1 END as allowed_login 
                            FROM
                                cms_user_login_attempts
                            WHERE
                                cula_date_time >= DATE_SUB(CURRENT_TIMESTAMP, interval 48 hour) 
                            AND 
                                cula_user_id = " . $db->SQLString($row->user_id) . "";

忽略您实际上不会锁定任何人的部分,我会使用不同的方法。

我会在您的用户表中添加一个字段last_bad_login_timebad_login_attempts。每当使用输入错误的密码并且在时间跨度 X 中没有 N 次尝试时,都会增加 #attempts(注意溢出,哈哈)并更新时间戳。如果用户正确登录,请刷新两个字段(或仅刷新 #attempts)。