Наверное, каждый сталкивался с ошибкой при попытке авторизации с не валидными данными, которая по-английски звучит так

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';

Проблемы, ошибки, неточности в тексте пишите в комментах.

Другие посты