Хочу сделать защиту от перебора паролей (метод «грубой силы») в моей системе на PHP для Панели Администратора. У меня уже стоит CAPTCHA, но это не защищает. Хочу сделать таймаут. Ввел 5 раз не правильно пароль — отдыхай 12 часов. Проблема вот в чем: просто так отследить компьютер-то не получается, IP у многих динамичный, а Cookie легко удаляются. Писать в БД «для всех» тоже не хорошо: вдруг кто-то просто так захочет побаловаться, а администратор потом будет сутки ждать. Есть, конечно, другой вариант: ставить таймаут после каждого ввода пароля секунд на 5, так, чтобы сильно замедлить брутфорс + можно после 100 неправильных паролей отсылать на email владельцу сайта письмо, мол, пытаются взломать. Что Вы думаете об этом?
Ответ
После первой неудачной попытки авторизации в час «проверяйте» пароль секунд 5-10 перед тем, как сообщить верный ли он. Пользователя при входе кидает на промежуточную страницу «минуточку, проверяем пароль», которая обновится только через 10 секунд и только тогда будет известно, вошли мы или нет. Обновил страницу раньше — продолжаешь ждать. Для этого на сервере, при каждой попытке авторизации: Проверяем время последней неудачной попытки входа. Если дальше, чем час назад — переходим к п.5. Запоминаем в сессии время начала запроса. Отдаем страницу «пожалуйста, подождите», которая всеми средствами (, javascript, ручная ссылка «обновить») обновляет себя. При каждом обращении смотрим, прошло ли 10 секунд с начала операции. Если не прошло — см. п.3, если нет — п.5. Выдаем результат авторизации, если успешно — логиним пользователя, если нет — запоминаем время неуспешной авторизации и назад на форму входа и от нее снова начиная с п.1. Брутфорс на скорости в меньше десятка паролей в минуту быстро перестанет быть интересным. Легитимный пользователь же подождет свои 10 секунд и успешно залогинится. Всякое security through obscurity типа входа по GET-параметрам не рекомендую. Оно будет или не сильно полезным или вредным (ссылка для входа останется в истории браузера и будет регулярно вылезать автокомплитом — прекрасная вещь для демонстрации гостям).
Комментариев нет:
Отправить комментарий