Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

function block_ip($ip) {
        $deny = array("$ip");
                if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
                    header("HTTP/1.1 403 Forbidden");
                    exit();
                }
            }

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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