我想通过检查登录尝试者的 IP 来防止暴力破解。然而,这对数据库来说将是一个巨大的问题;如果受到攻击,它将超载。还有其他解决方案吗?
服务器端会话?就像是
$_SESSION['$IP'] = $_SESSION['$IP'] +1;
我不想使用验证码,因为它很烦人。
我想通过检查登录尝试者的 IP 来防止暴力破解。然而,这对数据库来说将是一个巨大的问题;如果受到攻击,它将超载。还有其他解决方案吗?
服务器端会话?就像是
$_SESSION['$IP'] = $_SESSION['$IP'] +1;
我不想使用验证码,因为它很烦人。
在哪些方面会使数据库过载?您可以为每个 IP 地址维护一条记录,其中包含登录失败次数(成功登录时清除)。如果号码到达您的垃圾箱,您可以将帐户封锁一小时,并在帐户被封锁时保留一个带有时间戳的文件。没有必要记录每一次尝试,对吧?
不能依赖会话,如果攻击来自脚本,它甚至不支持会话。不能依赖 IP,因为脚本可以不断更改其原始 IP。
我在 PHP 中创建了一个负责暴力攻击保护的类。
https://github.com/ejfrancis/BruteForceBlocker
它将站点范围内的所有失败登录记录在数据库表中,如果过去 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;
}