如果我节省了第一次记录尝试的时间,并且如果在不到 1 分钟的时间内进行了第 10 次尝试,并且我禁止了 IP 地址,那是否足以阻止暴力攻击和 ddos?在现实生活中的例子中,用户是否有可能在一分钟内输入错误的地址超过 10 次?
编辑:也许我没有以正确的方式提出问题,在 10 次请求/m 之后阻止用户/IP 会使系统比 10 次错误尝试后的标准阻止更安全吗?
如果我节省了第一次记录尝试的时间,并且如果在不到 1 分钟的时间内进行了第 10 次尝试,并且我禁止了 IP 地址,那是否足以阻止暴力攻击和 ddos?在现实生活中的例子中,用户是否有可能在一分钟内输入错误的地址超过 10 次?
编辑:也许我没有以正确的方式提出问题,在 10 次请求/m 之后阻止用户/IP 会使系统比 10 次错误尝试后的标准阻止更安全吗?
我认为检测方法是相当正确的。如果用户每分钟尝试登录 10 次,这就是问题所在。
但是您需要检查是否:
在我看来,如果他试图进行 DoS 攻击,这不是对策,因为他提出什么查询并不重要,因为他只是想停止你的服务器。而且,他会尝试从许多具有不同 IP 的计算机上执行此操作,因此您无法轻易阻止它们。
我认为阻止 IP 是没有保护的,它可以让用户确定你有什么要隐藏的。你可以这样阻止他,所以他会开始另一种方式,你根本没有想到的方式。我认为 - 正如其他评论所说 - 您应该暂时阻止用户(您可以记录 IP,为什么不呢?),但向他显示“内部服务器/数据库错误,请稍候”之类的内容。
全球最大公司的所有主要网站都不会阻止任何人。
最后回答您的问题:是的,这种方法会在短期内使您的系统更加安全,但用户永远不应该知道他已被阻止。
我在 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;
}