Проверка IP против грубой силы - PullRequest
0 голосов
/ 17 марта 2011

Я хочу предотвратить грубую силу, проверив IP-адрес попытки входа в систему.Однако это будет огромной проблемой для базы данных;это перегрузит в случае нападения.Есть ли другое решение?

Сеанс на стороне сервера?Что-то вроде

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

Я не хочу использовать капчу, потому что это раздражает.

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

В какие сроки будет перегружаться БД? Вы можете поддерживать только одну запись для каждого IP-адреса с количеством неудачных входов в систему (очищается при успешном входе в систему). В случае, если номер достигнет вашей корзины, вы можете заблокировать учетную запись, например, на час и сохранить одну с отметкой времени, когда учетная запись была заблокирована. Нет необходимости регистрировать каждую попытку, верно?

1 голос
/ 16 октября 2014

На сеансы нельзя положиться, если атака идет по сценарию, он даже не будет поддерживать сеансы.На 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.

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

}

...