增加登录时间延迟停止强制执行,好主意?

时间:2011-01-27 17:05:27

标签: php passwords sleep password-protection brute-force

我已设置我的数据库以记录每次失败的登录尝试。我以为我会将失败的尝试次数乘以0.05秒或者其他东西。类似的东西:

            time_nanosleep(0, (50000000 * $failed_attempts ) ); 

黑客用来猜测密码的次数越多,每次检查都需要更多时间。检查100张密码后,他必须在每次尝试之间等待5秒。

这是阻止暴力破解的好方法吗?我通过IP识别用户。所以我猜你可以通过使用多个代理服务器或其他东西来强制执行应用程序,但除此之外,我认为这是一个好主意。你们觉得怎么样?

8 个答案:

答案 0 :(得分:9)

如下:

time_nanosleep(0, (10000000000 * (log($failed_attempts)^10)) ); 

这将为您提供指数增加的尝试窗口。

答案 1 :(得分:6)

我看到的第一个问题是你正在处理一个机器人,它不关心响应之间是否存在延迟。除非您采取措施限制此操作,否则您将耗尽系统资源并可能导致延迟很长时间。只是在5次尝试失败后禁止IP。如果你担心禁止真正的用户,这可能是暂时的禁令。

答案 2 :(得分:4)

按IP限制重试并使用验证码。不要让你的服务器过载,想想KISS。

答案 3 :(得分:4)

你应该尝试不使用Sleep(),因为它使用cpu周期,如果你有来自10,000个ip地址的强力攻击,你将分叉10,000个sleep()子进程或线程,这将导致服务器上的负载。

而是尝试使用PHP阻止IP地址。这样的事情。

function block_ip($ip) {
        $deny = array("$ip");
                if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
                    header("HTTP/1.1 403 Forbidden");
                    exit();
                }
            }

答案 4 :(得分:1)

它不应该是你反对强制执行的整个策略,但它是该战略的一个很好的组成部分,而且应该总是使用IMO。

答案 5 :(得分:1)

您可能希望以指数方式而不是线性地增加该时间;或使其固定,例如在5次尝试失败后拒绝一小时。

答案 6 :(得分:0)

我知道我已经在某个地方看到过这种情况,但我忘了在哪里。我看到的例子是,每次尝试失败都会使时间延迟加倍。如果您开始使用,比如说.1秒,那么可能错误输入密码一次或两次的普通用户可能会延迟0.4秒。他们甚至都不会注意到。但有人试图蛮力攻击他很快就会在几分钟或几小时内受到延误。

我想对于一个Web应用程序,可能存在对自己发起拒绝服务攻击的问题。这一切都取决于系统如何处理时间延迟。

答案 7 :(得分:0)

机器人并不真正关心你的延迟,无论是指数还是对数或任何东西。您使用的任何延迟都可以通过轮询来克服。所以,不要想迟延。考虑限制尝试次数并使用Google reCAPTCHA。它使用公钥 - 私钥加密。用于消除大多数机器人并且更难破解。