IP检查蛮力

时间:2011-03-17 09:32:37

标签: php login brute-force

我想通过检查登录尝试者的IP来防止蛮力。然而,这对数据库来说将是一个巨大的问题;在发生攻击时会超载。还有其他解决方案吗?

服务器端会话?像

这样的东西
$_SESSION['$IP'] = $_SESSION['$IP'] +1;

我不想使用验证码,因为它很烦人。

2 个答案:

答案 0 :(得分:3)

哪些条款会使DB过载?每个IP地址只能保留一条记录,登录失败次数(成功登录后清除)。如果该号码到达您的垃圾箱,您可以阻止该帐户持续一小时,并在帐户被阻止时保留一个带有时间戳的字段。没有必要记录每次尝试,对吧?

答案 1 :(得分:1)

如果攻击来自一个它甚至不支持会话的脚本,那么就不能依赖会话。由于脚本可以不断更改其原始IP,因此无法依赖IP。

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

https://github.com/ejfrancis/BruteForceBlocker

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

示例:

  

//构建油门设置数组。 (#recent failed logins => response)。

     

$ 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;
     

}