увеличить задержку входа в систему, чтобы остановить брутфорс, хорошая идея?

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

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

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

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


person ganjan    schedule 27.01.2011    source источник
comment
Отвечает ли это на ваш вопрос? Почему не удается спать (3) до проверки входа в систему, чтобы предотвратить грубую силу ?   -  person user4157124    schedule 02.04.2020


Ответы (8)


Как насчет чего-то вроде:

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

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

person Greg Buehler    schedule 27.01.2011
comment
Вы должны использовать произвольное значение и не увеличивать время экспоненциально. Злоумышленник проигнорирует дополнительное время, поскольку он понимает, что вы увеличиваете его за каждую неудачную попытку. В конечном итоге это будет стоить вашему серверу некоторых ресурсов и не даст никаких других преимуществ в плане безопасности. - person MaxVerro; 04.07.2018

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

person Brent Friar    schedule 27.01.2011
comment
Я точно не знаю, что имеет в виду Фрайар, но это наводит меня на интересную мысль. Вместо того, чтобы делать сон, почему бы не отклонить пользователя на экспоненциально растущий период времени? То есть после одного сбоя любые дальнейшие попытки входа с этого IP-адреса в течение, скажем, 1 секунды отклоняются. Следующий сбой 2 секунды. И т. д. Пользователь-человек, который ошибся при вводе пароля, скорее всего, даже не заметит этого: ему потребуется больше пары секунд, чтобы проверить пароль и ввести его заново. Но для бота он получит отказ, который он, вероятно, не знает, как интерпретировать. - person Jay; 27.01.2011

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

person r3st0r3    schedule 27.01.2011
comment
Да, используйте reCaptcha или что-то в этом роде, вы можете сделать так, чтобы он отображался после x неудачных попыток. - person Phoenix; 27.01.2011
comment
Я не люблю использовать CAPTCHA, особенно reCaptcha. Плохо для дизайна, плохо для удобства пользователя. - person ganjan; 28.01.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();
    }
}
person jackson    schedule 31.10.2011

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

person chaos    schedule 27.01.2011
comment
Я не вижу особой пользы — взломщику станет ясно, что происходит, по мере увеличения средней задержки, независимо от того, — но я не вижу и никакого вреда, если это понравится вам. - person chaos; 27.01.2011
comment
@хаос: Ну и что? Смысл не в том, чтобы удивить нападающего, а в том, чтобы замедлить его атаку. Мы строим стены вокруг замка, чтобы злоумышленникам было трудно проникнуть внутрь. Тот факт, что злоумышленник видит стены и понимает, что они существуют для того, чтобы не пустить его внутрь, не делает их менее эффективными. - person Jay; 27.01.2011
comment
Вы, кажется, отвечаете на пункты, которые я не делаю. Мой комментарий был ответом на akond. - person chaos; 27.01.2011

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

person ChrisW    schedule 27.01.2011

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

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

person Jay    schedule 27.01.2011

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

person r3st0r3    schedule 28.01.2011