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


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

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

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

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

Author: ganjan, 2011-01-27

8 answers

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

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

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

 9
Author: Greg Buehler, 2011-09-28 12:26:05

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

 6
Author: Brent Friar, 2011-01-27 17:10:31

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

 4
Author: r3st0r3, 2011-01-27 17:26:55

Вы должны стараться не использовать 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
Author: jackson, 2011-10-31 09:58:07

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

 1
Author: chaos, 2011-01-27 17:07:22

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

 1
Author: ChrisW, 2011-01-27 17:11:11

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

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

 0
Author: Jay, 2011-01-27 17:48:09

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

 0
Author: r3st0r3, 2011-01-28 02:50:38