2011-01-27 45 views
12

我已经设置我的数据库来记录每个失败的登录尝试。我以为我会用0.05秒或更多的时间乘以失败的尝试次数。例如:增加登录时间延迟停止bruteforcing,好主意?

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

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

这是停止bruteforcing的好方法吗?我通过IP识别用户。所以我猜你可以通过使用多个代理服务器或其他东西来强制应用程序,但除此之外,我认为这是一个好主意。你们有什么感想?

回答

9

什么是这样的:

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

这会给你一个指数增长企图窗口。

1

它不应该是你对bruteforcing的整个策略,但它是该战略的一个很好的组成部分,IMO几乎总是会被使用。

+0

拥有随机延迟而不是固定延迟也是一件好事。 – akond 2011-01-27 17:10:06

+0

我没有看到太多的好处 - 无论如何,平均延迟会升高,这种情况将会变得很明显,但是如果它吸引你的话,我也不会看到任何伤害。 – chaos 2011-01-27 17:11:22

+0

@akond为什么有一个随机延迟是好事? – ChrisW 2011-01-27 17:12:13

6

我看到的第一个问题是,你正在处理一个不关心响应之间是否存在延迟的bot。除非你做了一些限制,否则你会使用系统资源并可能造成很长时间的延迟。 5次失败尝试后禁止IP。如果你担心禁止真正的用户,这可能是一个临时禁令。

1

您可能希望按指数增长而不是仅仅线性增加;或使其固定,例如在5次失败尝试后否认一个小时。

4

限制IP重试并使用验证码。不要让你的服务器超载,请考虑KISS。

0

我知道我已经看到这个地方完成了,但我忘记了在哪里。我看到的例子是,每次尝试失败都会延长时间。如果开始时间为.1秒,则可能错误输入密码一次或两次的普通用户延迟0.4秒。他们甚至不会注意到。但是有人试图蛮横攻击他很快就会在分钟或几小时内延迟。

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

0

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

4

您应该尽量不要使用Sleep(),因为它使用cpu周期,并且如果您从10,000个ip地址获得蛮力攻击,则会fork 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(); 
       } 
      }