1

如果我节省了第一次记录尝试的时间,并且如果在不到 1 分钟的时间内进行了第 10 次尝试,并且我禁止了 IP 地址,那是否足以阻止暴力攻击和 ddos​​?在现实生活中的例子中,用户是否有可能在一分钟内输入错误的地址超过 10 次?

编辑:也许我没有以正确的方式提出问题,在 10 次请求/m 之后阻止用户/IP 会使系统比 10 次错误尝试后的标准阻止更安全吗?

4

2 回答 2

1

我认为检测方法是相当正确的。如果用户每分钟尝试登录 10 次,这就是问题所在。

但是您需要检查是否:

  • 用户不耐烦所以点击十次只是为了“让加载更快”。如果您使用 JavaScript 禁用登录按钮也没关系,但用户可以禁用 JS。
  • 用户在perform-login页面点击“刷新”,浏览器重新发送post数据。即使重定向他也是可能的,因为他的连接速度很慢。所以这可以被你视为攻击。
  • 用户已自动完成表单,但存储了错误的密码。他点击,所以有错误,所以他一次又一次,一次又一次。

在我看来,如果他试图进行 DoS 攻击,这不是对策,因为他提出什么查询并不重要,因为他只是想停止你的服务器。而且,他会尝试从许多具有不同 IP 的计算机上执行此操作,因此您无法轻易阻止它们。

我认为阻止 IP 是没有保护的,它可以让用户确定你有什么要隐藏的。你可以这样阻止他,所以他会开始另一种方式,你根本没有想到的方式。我认为 - 正如其他评论所说 - 您应该暂时阻止用户(您可以记录 IP,为什么不呢?),但向他显示“内部服务器/数据库错误,请稍候”之类的内容。

全球最大公司的所有主要网站都不会阻止任何人。

最后回答您的问题:是的,这种方法会在短期内使您的系统更加安全,但用户永远不应该知道他已被阻止。

于 2013-06-03T10:51:55.343 回答
0

我在 PHP 中创建了一个负责暴力攻击保护的类。

https://github.com/ejfrancis/BruteForceBlocker

它将站点范围内的所有失败登录记录在 db 表中,如果过去 10 分钟(或您选择的任何时间范围)内的失败登录次数超过设定的限制(也由您选择),它会强制执行时间延迟和/或再次登录之前的验证码要求。

例子:

//建立油门设置数组。(# 最近失败的登录 => 响应)。

$throttle_settings = [

    50 => 2,            //delay in seconds
    150 => 4,           //delay in seconds
    300 => 'captcha'    //captcha 

];

$BFBresponse = BruteForceBlocker::getLoginStatus($throttle_settings);

//$throttle_settings 是一个可选参数。如果不包含,将使用 BruteForceBlocker.php 中的默认设置数组

开关($BFBresponse['status']){

case 'safe':
    //safe to login
    break;
case 'error':
    //error occured. get message
    $error_message = $BFBresponse['message'];
    break;
case 'delay':
    //time delay required before next login
    $remaining_delay_in_seconds = $BFBresponse['message'];
    break;
case 'captcha':
    //captcha required
    break;

}

于 2014-10-15T23:27:28.783 回答