Как разблокировать аккаунт после 5 неудачных попыток входа
Наверное, каждый сталкивался с ошибкой при попытке авторизации с не валидными данными, которая по-английски звучит так
Sorry, there have been more than 5 failed login attempts for this account. It is temporarily blocked. Try again later or request a new password.
а по-русски
Аккаунт временно заблокирован по причине более чем 5 неудачных попыток входа. Попробуйте войти позже, или запросите новый пароль.
Это простая самооборона Друпала, которая активируется после 5 (по умолчанию) попыток входа. Таким образом, система не позволяет злоумышленникам забрутофорсить (англ. brute force. Cм. Полный перебор) сайт. Работает она достаточно просто: во время каждой авторизации, Друпал сохраняет ip-адрес пользователя, запоминая при этом, точную дату события и дату окончания «срока годности» попытки.
Вот некоторые нюансы:
- По умолчанию «срок годности» составляет 1 земной час.
- Количество возможных, неудачных попыток входа — 5.
- Эти значения могут быть изменены.
- Вместо ip-адреса может быть сохранено имя хоста.
- Данные, у которых истек «срок годности» очищаются только по крону.
- Вы можете войти в систему, в любом случае если пройдете процедуру «Сброса пароля»!
Вот еще один интересный факт:
Вы можете имя пользователя указать верно, но при этом 5 раз ошибиться с паролем. В таком случае, попытки авторизации будут запрещены на 6 часов. При этом, через 60 минут можно будет повторить попытку входа, но с другого ip-адреса.
Что касается простых смертных — мы разобрались. Администраторы, же или программисты могут сталкиваться с этой проблемой чаще, т.к. им хлеб в рот не клади, дай только что-нибудь сломать. К счастью, для тех у кого есть доступ к Драшу или напрямую к базе могут обойтись без сброса пароля или часового ожидания. Нужно просто почистить таблицу flood
. Вот восемь способов это сделать.
# Очистить все. drush sqlq "DELETE FROM flood" ; # Снять блокировку для существующего пользователя с id=1. drush sqlq "DELETE FROM flood WHERE event = 'failed_login_attempt_user' AND identifier LIKE '1-%'" ; # Очистить данные для определенного ip адреса. drush sqlq "DELETE FROM flood WHERE event = 'failed_login_attempt_user' AND identifier LIKE '127.0.0.1'" ; # Если вы не имеете установленного Drush, тогда заходим в консоль базы и выполняем запросы "на живую". mysql> DELETE FROM flood; mysql> DELETE FROM flood WHERE event = 'failed_login_attempt_user' AND identifier LIKE '1-%' ; mysql> DELETE FROM flood WHERE event = 'failed_login_attempt_user' AND identifier LIKE '127.0.0.1' ;
Проблемы, ошибки, неточности в тексте пишите в комментах.