Brute Force атаки — одна из самых распространённых угроз для сайтов на WordPress. Злоумышленники пытаются подобрать логин и пароль, используя автоматические скрипты, что может привести к взлому сайта, потере данных и даже попаданию под санкции поисковых систем.
Почему важно защищать WordPress от Brute Force атак
WordPress — самая популярная CMS в мире, и именно поэтому она часто становится мишенью для атак. Простые пароли и стандартные пути авторизации делают сайт уязвимым. Даже если вы используете сложные пароли, постоянные попытки входа могут перегрузить сервер, снизить производительность сайта и привести к отказу в обслуживании.
Большинство пользователей устанавливают плагины для защиты, например, Clearfy Pro, но иногда хочется обойтись минимальным количеством плагинов, особенно на легковесных или кастомных решениях.
Как реализовать защиту от Brute Force атак без плагинов
Основная идея — ограничить количество попыток входа с одного IP-адреса за определённый промежуток времени. Если попыток слишком много — блокировать дальнейшие запросы.
Для этого добавим код в файл functions.php вашей темы или в отдельный файл собственного плагина.
Шаг 1. Создаём механизм подсчёта попыток
Сохранять количество попыток будем в transient — временном кеше WordPress, привязанном к IP пользователя. Это позволит легко сбрасывать счётчик спустя заданное время.
function wprus_increment_login_attempts() {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wprus_login_attempts_' . md5($ip);
$attempts = (int) get_transient($transient_key);
$attempts++;
set_transient($transient_key, $attempts, 15 * MINUTE_IN_SECONDS); // 15 минут
return $attempts;
}Шаг 2. Проверяем количество попыток перед авторизацией
Используем хук authenticate, чтобы перехватить попытку входа и проверить, не превышено ли ограничение.
function wprus_limit_login_attempts($user, $username, $password) {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wprus_login_attempts_' . md5($ip);
$attempts = (int) get_transient($transient_key);
$max_attempts = 5; // Максимум попыток
if ($attempts >= $max_attempts) {
return new WP_Error('too_many_attempts', __('Слишком много неудачных попыток входа. Попробуйте позже.'));
}
return $user;
}
add_filter('authenticate', 'wprus_limit_login_attempts', 30, 3);Шаг 3. Увеличиваем счётчик при неудачной авторизации
Хук wp_login_failed позволит нам узнать о неудачном входе и увеличить счётчик.
function wprus_login_failed($username) {
wprus_increment_login_attempts();
}
add_action('wp_login_failed', 'wprus_login_failed');Шаг 4. Сбрасываем счётчик при успешном входе
Если пользователь успешно вошёл, логично очистить счётчик попыток для его IP.
function wprus_clear_login_attempts($user_login, $user) {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wprus_login_attempts_' . md5($ip);
delete_transient($transient_key);
}
add_action('wp_login', 'wprus_clear_login_attempts', 10, 2);Дополнительные рекомендации по защите от Brute Force
Используйте двухфакторную аутентификацию
Даже если злоумышленник попробует подобрать пароль, двухфакторная аутентификация (2FA) значительно повысит безопасность. Можно использовать бесплатные плагины, например, WPCommunity с поддержкой 2FA.
Измените URL страницы входа
Большинство Brute Force атак направлены на стандартный URL /wp-login.php или /wp-admin. Изменение URL страницы входа усложнит задачу автоматическим скриптам.
Плагины типа Clearfy Pro позволяют сделать это легко, но можно реализовать и вручную с помощью .htaccess и фильтров.
Ограничьте доступ по IP
Если у вас фиксированный IP или диапазон IP, можно ограничить доступ к странице входа через .htaccess или через серверные правила nginx.
Отладка и проверка работы защиты
После добавления кода проверьте, что при превышении попыток входа сайт действительно блокирует доступ с соответствующим сообщением. Попытайтесь войти с неправильным паролем 5 раз подряд и убедитесь, что шестая попытка заблокирована.
Если используете кеширование, временно отключите его или добавьте исключения для страниц входа, чтобы transient работал корректно.
Заключение
Реализация защиты от Brute Force атак без плагинов позволяет снизить нагрузку и повысить безопасность сайта за счёт простого и эффективного кода. Такой подход удобен для разработчиков, которые хотят контролировать процесс и не перегружать сайт лишними расширениями.
Для расширенной защиты рекомендуем комбинировать данный метод с двухфакторной аутентификацией, изменением URL входа и ограничением доступа по IP.