В сценарии входа в систему PHP, почему этот псевдокод не может предотвратить атаку методом подбора? Конечно, это все еще возможно, если уделить достаточно времени, но бесполезно грубо насиловать что-либо, кроме нескольких символов?
Изменить: я не спрашиваю, каков оптимальный способ создания сценария входа в систему — просто ли Sleep () является эффективным способом радикально сокращение шанс успеха атак грубой силы.
<?php
sleep(2)
if($_POST['password'] == $passwordInDB)
$loggedIn = true;
else {
sleep(3) //slow down even more on failed attempts.
echo "login failed";
}
....
?>
Предположения:
Мой скрипт потратил 5 секунд, чтобы завершить неудачный запрос.
Разве злоумышленник не сможет выполнить в этом случае только 100 * 5/60 = 8,3 догадки в секунду? Что совершенно бесполезно для любого нормального пароля?
Многие комментарии, кажется, связывают «грубую силу» с атакой «распределенное отрицание». Они не то же самое. Для анализа «грубой силы» нам нужно рассмотреть только один злоумышленник, делающий поток запросов в попытке выяснить пароль.
Ваше использование sleep
здесь хорошо Замедление процесса онлайн-авторизации — это хорошо изученная функция сопротивления. Вместо того, чтобы перефразировать сказанное, посмотрим, что сказал Том Лик о безопасности..
Я мог бы предложить что-то более умное, хотя. У вас действительно нет атаки, пока у вас не появятся доказательства повторных попыток. Таким образом, вам нужно считать попытки и замедляться как функция попыток: больше попыток, больше задержки. Это означает, что для вашего среднего пользователя, который получает, скажем, 3 попытки, они не испытывают искусственной задержки. Но более чем, скажем, 3, вы начинаете добавлять в max(32, 2^(n-3))
сон — этого должно быть достаточно, чтобы отразить любого, кто пытается атаковать грубой силой онлайн.
Других решений пока нет …