Bruteforce атаки — одна из самых распространённых угроз для сайтов на WordPress. Злоумышленники пытаются подобрать пароль к админке, используя автоматические скрипты, что может привести к взлому сайта, потере данных и проблемам с производительностью. В этой статье мы рассмотрим, как реализовать простую, но эффективную защиту от bruteforce атак с помощью пользовательского кода без установки дополнительных плагинов.
Почему важно защитить WordPress от bruteforce атак
Каждый сайт на WordPress, особенно с открытой страницей входа, подвержен попыткам взлома. По статистике, большинство атак происходит именно через подбор пароля. Если не принять меры, злоумышленник может:
- получить доступ к административной панели;
- установить вредоносный код;
- использовать сайт для рассылки спама;
- повлиять на SEO-показатели сайта;
- привести к полной потере контроля над сайтом.
Поэтому защита от bruteforce — неотъемлемая часть безопасности WordPress.
Ключевые методы защиты от bruteforce атак
Существует несколько способов повысить уровень безопасности входа на сайт:
- Ограничение количества попыток входа с одного IP;
- Реализация задержек после неудачных попыток;
- Использование двухфакторной аутентификации;
- Блокировка IP на уровне сервера;
- Переименование или скрытие стандартной страницы входа.
В этой статье мы сосредоточимся на реализации ограничения количества попыток с помощью кода.
Как реализовать ограничение попыток входа с помощью кода
Для начала создадим механизм, который будет считать неудачные попытки входа и блокировать IP при превышении лимита. Мы используем transient API WordPress для хранения счетчика попыток с сохранением на 1 час.
Шаг 1. Отслеживание неудачных попыток входа
Добавим обработчик события wp_login_failed, который срабатывает при неуспешном входе. В нем будем увеличивать счетчик попыток для IP пользователя.
function wpmoney_track_failed_login( $username ) {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wpmoney_failed_login_' . $ip;
$count = (int) get_transient( $transient_key );
$count++;
set_transient( $transient_key, $count, HOUR_IN_SECONDS );
}
add_action( 'wp_login_failed', 'wpmoney_track_failed_login' );Шаг 2. Блокировка входа при превышении лимита
Теперь при попытке входа проверим количество неудачных попыток и при превышении лимита — заблокируем вход с сообщением об ошибке.
function wpmoney_limit_login_attempts() {
if ( ! empty( $_POST['log'] ) && ! empty( $_POST['pwd'] ) ) {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wpmoney_failed_login_' . $ip;
$count = (int) get_transient( $transient_key );
$max_attempts = 5; // Максимум попыток
if ( $count >= $max_attempts ) {
wp_die( 'Вы превысили максимальное количество попыток входа. Попробуйте позже.' );
}
}
}
add_action( 'login_form_login', 'wpmoney_limit_login_attempts' );Шаг 3. Сброс счетчика при успешном входе
Чтобы не блокировать пользователя, если он всё же ввёл правильный пароль, сбросим счетчик после успешного входа.
function wpmoney_reset_failed_login_count( $user_login, $user ) {
$ip = $_SERVER['REMOTE_ADDR'];
$transient_key = 'wpmoney_failed_login_' . $ip;
delete_transient( $transient_key );
}
add_action( 'wp_login', 'wpmoney_reset_failed_login_count', 10, 2 );Дополнительные рекомендации по усилению защиты
Использование плагинов для безопасности
Если вы хотите расширить функциональность и получить дополнительные функции безопасности, рассмотрите использование плагинов, таких как Clearfy Pro. Этот плагин позволяет легко включать защиту от bruteforce, блокировать IP, а также оптимизировать работу сайта.
Двухфакторная аутентификация
Для максимальной безопасности рекомендуется добавить двухфакторную аутентификацию. Это можно сделать с помощью плагинов, например, WPGPT – хотя он и заточен под AI, в экосистеме WordPress существует множество специализированных решений для 2FA.
Смена URL страницы входа
Стандартный URL входа /wp-login.php легко найти и атаковать. Рекомендуется использовать плагин, чтобы изменить URL страницы входа — это значительно усложнит задачу злоумышленникам.
Как проверить работу защиты от bruteforce
После внедрения кода протестируйте защиту:
- Попробуйте ввести неправильный пароль 5 раз с одного IP — должно появиться сообщение о блокировке;
- Попробуйте войти с правильным паролем — счетчик должен сброситься;
- Проверьте, что блокировка снимается через час (или другой период, установленный в transient).
Для отладки удобно использовать браузер в режиме инкогнито и сбрасывать куки, чтобы не мешали кеши и сессии.
Заключение
Реализация защиты от bruteforce атак в WordPress с помощью собственного кода — простой и эффективный способ повысить безопасность сайта без установки лишних плагинов. В сочетании с другими мерами — двухфакторной аутентификацией, сменой URL входа и использованием проверенных плагинов, таких как Clearfy Pro — вы получите надежную защиту от большинства атак.