-1

我想通过检查登录尝试者的 IP 来防止暴力破解。然而,这对数据库来说将是一个巨大的问题;如果受到攻击,它将超载。还有其他解决方案吗?

服务器端会话?就像是

$_SESSION['$IP'] = $_SESSION['$IP'] +1;

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

4

2 回答 2

3

在哪些方面会使数据库过载?您可以为每个 IP 地址维护一条记录,其中包含登录失败次数(成功登录时清除)。如果号码到达您的垃圾箱,您可以将帐户封锁一小时,并在帐户被封锁时保留一个带有时间戳的文件。没有必要记录每一次尝试,对吧?

于 2011-03-17T09:37:15.497 回答
1

不能依赖会话,如果攻击来自脚本,它甚至不支持会话。不能依赖 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;

}

于 2014-10-15T23:28:40.977 回答