Почему не может заснуть (3) перед проверкой входа, чтобы предотвратить грубую силу? - PullRequest
0 голосов
/ 22 октября 2018

Почему в этом сценарии входа в систему PHP этот псевдокод не предотвращает атаку методом подбора?Конечно, это все еще возможно при наличии достаточного количества времени, но в целом бесполезно грубо форсировать что-либо, кроме нескольких символов?

Редактировать: Я не спрашиваю, каков оптимальный способ создания сценария входа - просто или нетnot sleep () - эффективный способ радикального уменьшения вероятности успеха атак грубой силы.

<?php
sleep(2)

if($_POST['password'] == $passwordInDB)
    $loggedIn = true;
else {
   sleep(3) //slow down even more on failed attempts.
   echo "login failed";
}
....
?>

Допущения:

  1. Это обычный базовый веб-сайт, требующий предотвращения атак «лучше, чем ничего».Очевидно, что огромные сайты с миллионами пользователей - это совсем другая история.
  2. Apache настроен с MaxRequestWorkers, например, на 100 (по умолчанию: 256)
  3. Сервер достаточно мощный, чтобы обрабатывать 100 одновременных запросов.

Мой сценарий потратил бы 5 секунд на завершение неудавшегося запроса.

Разве злоумышленник не мог бы выполнять в этом случае только 100 * 5/60 = 8,3 догадки в секунду?Что совершенно бесполезно для любого обычного пароля?

Ответы [ 2 ]

0 голосов
/ 27 июля 2019

Проблема с sleep() заключается в том, что рабочие потоки Apache останавливаются, пока длится сон, и не могут прерваться, так что эти 100 рабочих будут постоянно задерживаться злоумышленником, и законные пользователи не смогут войти на сайт.Злоумышленнику нужно только сделать> 33 запроса в секунду, чтобы ваш сайт не смог обработать другие запросы входа в систему.

0 голосов
/ 23 октября 2018

Многие комментарии, кажется, связывают "грубую силу" с атакой "распределенное отрицание".Они не то же самое.Для анализа «грубой силы» нам нужно рассмотреть только один злоумышленник, делающий поток запросов, чтобы выяснить пароль.

Ваше использование sleep здесь хорошо.Замедление процесса авторизации онлайн является хорошо изученной особенностью сопротивления.Вместо того, чтобы перефразировать сказанное, посмотрите, что сказал Том Лик о безопасности. SE .

Хотя я мог бы предложить что-то более разумное.У вас не будет атаки, пока у вас не появятся доказательства повторных попыток.Таким образом, вам нужно считать попытки и замедляться как функция попыток: больше попыток, больше задержки.Это означает, что для вашего среднего пользователя, который получает, скажем, 3 попытки, они не испытывают никакой искусственной задержки.Но более чем, скажем, 3, вы начинаете добавлять в max(32, 2^(n-3)) сон - этого должно быть достаточно, чтобы отразить любого, кто пытается атаковать грубой силой онлайн.

...