Если на сайте регулярно перебирают пароли, ограничение числа попыток входа — один из самых простых и практичных способов снизить риск взлома. Для обычного WordPress-сайта не нужно настраивать серверные правила или писать свой код: чаще всего достаточно поставить плагин, который временно блокирует IP после нескольких неудачных входов и ведёт журнал подозрительной активности.
Сразу оговорюсь: это не заменяет сложные пароли, двухфакторную аутентификацию и актуальные обновления. Но как базовая защита от брутфорса ограничение попыток входа работает хорошо и почти не мешает обычным пользователям.
Что именно нужно ограничивать
В WordPress атака обычно идёт через стандартную форму авторизации /wp-login.php или через AJAX-авторизацию, если тема или плагин добавили собственную форму входа. Смысл защиты простой: после нескольких неудачных попыток система должна временно заблокировать дальнейшие запросы с одного IP или с одной учётной записи, а при повторении — увеличить время блокировки.
На практике полезны три вещи:
- лимит неудачных попыток за короткий промежуток времени;
- временная блокировка IP или логина;
- уведомления о подозрительной активности, если атак слишком много.
Если у вас небольшой сайт, этого обычно достаточно. Для более нагруженных проектов можно дополнить защиту CAPTCHA, двухфакторной аутентификацией и ограничением доступа к админке по IP, но это уже отдельные меры.
Самый простой способ — плагин для ограничения попыток входа
Для большинства сайтов лучший вариант — установить плагин, который специально отвечает за блокировку брутфорса. Это быстрее и безопаснее, чем пытаться собирать защиту вручную. В каталоге WordPress есть несколько рабочих решений, но при выборе смотрите не на количество функций, а на то, умеет ли плагин:
- блокировать по IP после заданного числа ошибок;
- задавать время блокировки;
- вести лог попыток;
- работать с вашей формой входа, если она нестандартная;
- не конфликтовать с кэшированием и страницами авторизации.
После установки обычно достаточно открыть настройки плагина и задать порог блокировки. Типичный рабочий сценарий для небольшого сайта — 3–5 неудачных попыток, затем блокировка на 15–60 минут. Если атаки идут постоянно, можно сделать блокировку длиннее, но не стоит сразу ставить слишком жёсткие значения: иногда пользователи сами ошибаются в пароле несколько раз подряд.
Как настроить защиту без лишнего риска
Если плагин позволяет выбрать параметры, ориентируйтесь на такой порядок:
- Ограничьте число ошибок входа до 3–5 попыток.
- Включите временную блокировку IP.
- Поставьте разумный срок блокировки: от 15 минут до часа.
- Включите уведомления на почту, если они не спамят при каждой мелкой ошибке.
- Проверьте, не блокируется ли администратор при обычной работе с сайтом.
Если на сайте несколько редакторов или авторов, не делайте слишком короткий лимит. Иначе при ошибке в пароле человек сам себя заблокирует и начнёт писать в поддержку. Для корпоративного сайта это особенно неприятно, если вход нужен ежедневно.
Если нужен минимальный код, а не отдельный плагин
Иногда плагин для защиты от брутфорса ставить не хочется, а серверная настройка недоступна. В таком случае можно использовать готовое решение на уровне WordPress-хука, но это уже вариант для тех, кто понимает, как добавлять код в functions.php дочерней темы или в собственный мини-плагин. Такой способ не самый удобный для поддержки, зато он не требует сложной серверной конфигурации.
Ниже пример логики, которая блокирует пользователя после нескольких неудачных попыток входа. Это не полноценная промышленная защита, а базовый шаблон, который показывает принцип работы. Перед использованием обязательно проверьте его на тестовом сайте или в staging-окружении.
add_action('wp_login_failed', function ($username) {
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
$key = 'login_fail_' . md5($ip);
$data = get_transient($key);
if (!is_array($data)) {
$data = ['count' => 0, 'last' => time()];
}
$data['count']++;
$data['last'] = time();
set_transient($key, $data, 15 * MINUTE_IN_SECONDS);
});
add_filter('authenticate', function ($user, $username, $password) {
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
$key = 'login_fail_' . md5($ip);
$data = get_transient($key);
if (is_array($data) && !empty($data['count']) && $data['count'] >= 5) {
return new WP_Error('too_many_attempts', 'Слишком много неудачных попыток входа. Попробуйте позже.');
}
return $user;
}, 30, 3);У этого подхода есть ограничения. Он завязан на IP-адрес, а за NAT или у мобильных операторов один IP может использоваться разными людьми. Кроме того, такой код не даёт полноценного журнала и удобного интерфейса настроек. Поэтому для обычного сайта плагин почти всегда практичнее.
Как проверить, что ограничение попыток работает
После настройки не полагайтесь на предположения. Проверьте защиту вручную:
- Откройте страницу входа в приватном окне браузера.
- Введите неверный пароль несколько раз подряд.
- Убедитесь, что после заданного лимита сайт перестаёт принимать попытки и показывает сообщение о блокировке.
- Проверьте, приходит ли уведомление администратору, если вы его включили.
- Попробуйте войти с правильным паролем после окончания времени блокировки.
Если блокировка не срабатывает, причина обычно одна из трёх: плагин не поддерживает вашу форму входа, кэш или прокси скрывает реальный IP, либо защита конфликтует с другим плагином авторизации. В таком случае сначала проверьте, не используется ли отдельная форма входа от темы, конструктора или membership-плагина.
На что обратить внимание, чтобы не заблокировать своих пользователей
Самая частая ошибка — слишком жёсткий лимит. Если поставить 1–2 попытки и длинную блокировку, вы создадите проблемы реальным людям. Ещё одна типичная ситуация — защита по IP в офисе или в мобильной сети: один неудачный вход может повлиять на других пользователей, если они выходят в интернет через общий адрес.
Поэтому для большинства сайтов разумнее начинать с мягкой настройки и смотреть на журнал событий. Если видите много атак с одних и тех же адресов, можно ужесточить правила. Если же в логах много обычных ошибок от своих сотрудников, лимит лучше ослабить и добавить двухфакторную аутентификацию для админов.
И ещё один практический момент: если у вас включён кэш на уровне сервера или CDN, не кэшируйте страницу входа. Это не относится напрямую к лимиту попыток, но без этого защита и сама форма авторизации могут вести себя нестабильно.
Что выбрать в итоге
Если нужен быстрый и надёжный способ без лишней возни, ставьте плагин для ограничения попыток входа. Это лучший вариант для большинства сайтов на WordPress: он не требует правок сервера, легко настраивается и позволяет сразу увидеть, кто и как часто пытается подобрать пароль.
Если у вас есть разработчик и нужен полностью кастомный сценарий, можно реализовать базовую блокировку через хук WordPress, но для поддержки и диагностики это менее удобно. В любом случае ограничение попыток входа стоит рассматривать как обязательный минимум для сайта, который уже сталкивался с подбором паролей или подозрительной активностью в форме авторизации.