Brute Force атаки — одна из самых распространённых угроз для сайтов на WordPress. Злоумышленники пытаются подобрать пароль, перебирая множество вариантов с целью получить доступ к админке. В этой статье подробно разберём, как эффективно защитить WordPress от таких атак, используя плагины, встроенные методы и кастомные решения с примерами кода.
Что такое Brute Force атака и почему она опасна для WordPress
Brute Force атака — это метод взлома, при котором автоматизированные скрипты перебирают логины и пароли для входа на сайт. В WordPress чаще всего целью становятся учётные записи с правами администратора, так как их взлом открывает полный контроль над сайтом.
Опасность заключается не только в потере контроля над ресурсом, но и в дальнейшем использовании сайта для рассылки спама, размещения вредоносного кода или участия в ботнетах. Поэтому важно предпринять меры защиты ещё на этапе разработки и поддержки сайта.
Использование плагинов для защиты от Brute Force
Самый простой и эффективный способ — установить специализированный плагин, который ограничит количество попыток входа, заблокирует IP-адреса или добавит капчу.
Популярные плагины для защиты от Brute Force
- Loginizer — ограничивает количество попыток входа, блокирует IP, поддерживает белые списки.
- WP Cerber Security — комплексный плагин с защитой от Brute Force, двухфакторной аутентификацией и мониторингом активности.
- Wordfence Security — мощный инструмент с файрволом, сканером и защитой от атак.
Например, чтобы настроить Loginizer, достаточно установить и активировать плагин, затем в его настройках задать количество попыток (например, 5) и время блокировки (например, 30 минут).
Для установки плагина через админку WordPress:
function wpcodes_install_loginizer() {
if ( !function_exists('activate_plugin') ) {
include_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$plugin_slug = 'loginizer/loginizer.php';
if ( !is_plugin_active( $plugin_slug ) ) {
activate_plugin( $plugin_slug );
}
}
Ограничение попыток входа с помощью кода в functions.php
Если вы хотите обойтись без плагинов, можно реализовать защиту самостоятельно. Ниже пример функции, которая ограничивает количество неудачных попыток входа по IP и блокирует дальнейшие попытки на 15 минут.
function wpcodes_limit_login_attempts() {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_name = 'wpcodes_login_attempts_' . $ip;
$attempts = (int) get_transient($transient_name);
if ( $attempts >= 5 ) {
wp_die('Вы превысили количество попыток входа. Попробуйте через 15 минут.');
}
}
add_action('wp_login_failed', 'wpcodes_increment_login_attempts');
function wpcodes_increment_login_attempts() {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_name = 'wpcodes_login_attempts_' . $ip;
$attempts = (int) get_transient($transient_name);
$attempts++;
set_transient($transient_name, $attempts, 15 * MINUTE_IN_SECONDS);
}
add_action('login_form', 'wpcodes_limit_login_attempts');
Этот код хранит количество неудачных попыток во временном кеше WordPress. После 5 неудачных попыток с одного IP вход блокируется на 15 минут. Такой подход прост и не требует установки плагинов, но не защищает от атак с разных IP или с прокси.
Добавление капчи на страницу входа
Капча — эффективный способ предотвратить автоматизированные атаки. Один из популярных вариантов — интеграция Google reCAPTCHA.
Для добавления reCAPTCHA вручную можно использовать следующий пример:
function wpcodes_add_recaptcha_to_login() {
?>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="ВАШ_SITE_KEY"></div>
<?php
}
add_action('login_form', 'wpcodes_add_recaptcha_to_login');
function wpcodes_verify_recaptcha_on_login($user, $username, $password) {
if ( isset($_POST['g-recaptcha-response']) ) {
$response = wp_remote_post('https://www.google.com/recaptcha/api/siteverify', [
'body' => [
'secret' => 'ВАШ_SECRET_KEY',
'response' => $_POST['g-recaptcha-response'],
'remoteip' => $_SERVER['REMOTE_ADDR']
]
]);
$response_body = wp_remote_retrieve_body($response);
$result = json_decode($response_body, true);
if ( empty($result['success']) || !$result['success'] ) {
return new WP_Error('captcha_failed', __('<strong>Ошибка:</strong> Пожалуйста, подтвердите, что вы не робот.'));
}
} else {
return new WP_Error('captcha_missing', __('<strong>Ошибка:</strong> Капча не была пройдена.'));
}
return $user;
}
add_filter('authenticate', 'wpcodes_verify_recaptcha_on_login', 21, 3);
Для работы нужно зарегистрироваться на Google reCAPTCHA и получить Site Key и Secret Key. Этот код добавит капчу на страницу входа и проверит ответ при аутентификации.
Двухфакторная аутентификация (2FA) как дополнительный уровень защиты
Добавление 2FA значительно усложняет задачу злоумышленнику. Для WordPress существуют плагины, например, WPCommunity, которые поддерживают двухфакторную аутентификацию с помощью Google Authenticator, email или SMS.
Настройка 2FA обычно проста и занимает несколько минут. После активации пользователь при входе вводит не только пароль, но и одноразовый код из приложения на смартфоне.
Дополнительные советы по защите от Brute Force атак
- Смена стандартного URL входа: Переименуйте страницу входа с /wp-login.php на что-то уникальное с помощью плагинов вроде WPS Hide Login.
- Использование сложных паролей: Обязательно используйте пароли с высокой энтропией, состоящие из букв, цифр и символов.
- Ограничение доступа по IP: Если у вас фиксированные IP для администраторов, настройте ограничение доступа через .htaccess или серверные правила.
- Регулярное обновление: Обновляйте ядро WordPress, темы и плагины, чтобы закрывать уязвимости.
Выводы и рекомендации
Защита WordPress от Brute Force атак — обязательный элемент безопасности любого сайта. Используйте комплексный подход: установите плагин для ограничения попыток, добавьте капчу, рассмотрите двухфакторную аутентификацию и не забывайте про регулярные обновления.
Если хотите быстро и эффективно защитить сайт, обратите внимание на плагин WPCommunity — он сочетает в себе множество функций безопасности, включая 2FA.