увеличение времени задержки для входа в систему, чтобы остановить брутфорс, хорошая идея? - PullRequest
12 голосов
/ 27 января 2011

Я настроил свою базу данных для регистрации каждой неудачной попытки входа в систему. Я думал, что умножу количество неудачных попыток на 0,05 секунды или что-то в этом роде. Что-то вроде:

            time_nanosleep(0, (50000000 * $failed_attempts ) ); 

Чем больше попыток взломать пароль использует хакер, тем больше времени требуется для проверки каждый раз. После проверки 100 записей он должен ждать 5 секунд между каждой попыткой.

Это хороший способ прекратить брутфорс? Я идентифицирую пользователей по IP. Поэтому я думаю, что вы можете использовать приложение, используя несколько прокси-серверов или что-то в этом роде, но, на мой взгляд, это хорошая идея. Что вы, ребята, думаете?

Ответы [ 8 ]

9 голосов
/ 27 января 2011

Что-то вроде:

time_nanosleep(0, (10000000000 * (log($failed_attempts)^10)) ); 

Это даст вам экспоненциально увеличивающееся окно попытки.

6 голосов
/ 27 января 2011

Первая проблема, которую я вижу, это то, что вы имеете дело с ботом, которому все равно, есть ли задержка между ответами.Если вы не делаете что-то для ограничения этого, вы используете системные ресурсы с потенциально очень длительными задержками.Просто забаньте IP после 5 неудачных попыток.Это может быть временный бан, если вы беспокоитесь о бане реального пользователя.

4 голосов
/ 31 октября 2011

Вы должны стараться не использовать Sleep (), потому что он использует циклы ЦП, и если у вас атака грубой силы с 10 000 IP-адресов, вы будете форкировать 10 000 дочерних процессов или потоков sleep (), это вызовет нагрузку на ваш сервер.

Вместо этого попробуйте заблокировать IP-адрес с помощью PHP. Как то так.

function block_ip($ip) {
        $deny = array("$ip");
                if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
                    header("HTTP/1.1 403 Forbidden");
                    exit();
                }
            }
4 голосов
/ 27 января 2011

Ограничьте количество попыток по IP и используйте CAPTCHA. Не перегружайте свой сервер, подумайте, ПОЦЕЛУЙ.

1 голос
/ 27 января 2011

Возможно, вы захотите увеличить это время экспоненциально, а не просто линейно; или исправить это, например, отказать в течение часа после 5 неудачных попыток.

1 голос
/ 27 января 2011

Это не должна быть вся ваша стратегия против брутфорсинга, но это отличный компонент для этой стратегии, и IMO следует использовать почти всегда.

0 голосов
/ 28 января 2011

Боты на самом деле не заботятся о вашей задержке, будь то экспоненциальная, логарифмическая или что-то еще. Любая задержка, которую вы используете, может быть преодолена путем опроса. Так что, не думайте о задержке. Подумайте об ограничении количества попыток и используйте Google reCAPTCHA. Он использует шифрование с открытым и закрытым ключом. Работает на устранение большинства ботов и труднее взломать.

0 голосов
/ 27 января 2011

Я знаю, что где-то видел это, хотя и забыл, где.В примере, который я видел, они удваивали время задержки при каждой неудачной попытке.Если вы начали, скажем, с 0,1 секунды, обычный пользователь, который может неправильно набрать свой пароль один или два раза, получит задержку в 0,4 секунды.Они даже не заметят.Но тот, кто попытается атаковать грубой силой, быстро получит задержки в минутах или часах.

Я полагаю, что для веб-приложения может быть проблема запуска атаки типа "отказ в обслуживании".Все зависит от того, как система обрабатывает задержки.

...