Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Как сделать таймаут при вводе пароля?

#php #защита #взлом


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


Ответы

Ответ 1



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

Ответ 2



Во первых стоит сделать защиту от чрезмерно частых запросов страниц. Во вторых предложу такой вариант: записывать в файл или еще куда id пользователей и время подбора и удваивайте таймаут ввода пароля вплоть до 24х часов. Данный способ рекомендовали на хабре но для несколько других целей.

Ответ 3



Динамический IP - на самом деле небольшая сказка. Он по факту не меняется при каждом переподключении, даже на диалапе (который, как я думаю, отсутствует в наше время). Плюс можно использовать уникальный ключ (md5 от юзерагента, IP, еще каких-либо данных)

Ответ 4



Панель администратора говоришь? Ну как вариант переместить админку, т.е. поменяй урл, старый можешь оставить, но чтоб всегда неправильный пароль писал. Если капчу обходят, то поменяй капчу на более сложную, на рекапчу например, порой самому трудно прочитать что там написано. Капча в основном помогает от ботов, но и от живого брутера поможет, который через пару десяток капч бросит сие занятие.

Ответ 5



Давно писал такую штуку, покопайте session_start(); $time = time(); ### Разрешать запросы # Не чаще чем $max_n = 5; # раз # за $max_t = 10; # секунд if(empty($_SESSION['ban']['time'])){ $_SESSION['ban']['time'] = $time; } if(empty($_SESSION['ban']['rate'])){ $_SESSION['ban']['rate'] = 1; } if($_SESSION['ban']['time']+$max_t < $time){ unset($_SESSION['ban']); echo 'true'; }else{ if($_SESSION['ban']['rate'] > $max_n){ echo 'false'; }else{ $_SESSION['ban']['rate']++; echo 'true'; } }

Ответ 6



А ещё вот так можно сделать: Как защитить админку сайта? То есть - вход только по get запросу. Если его нет - тогда пусть выходит чистая страница. И так вообще не понятно будет что это такое.

Комментариев нет:

Отправить комментарий