В современном WordPress-сайте важно эффективно управлять доступом, чтобы защитить ресурс от спама, ботов и нежелательных пользователей. Чёрные списки — один из ключевых инструментов для этого. В этой статье мы подробно рассмотрим, как автоматизировать создание и удаление чёрных списков IP-адресов и пользователей в WordPress с помощью собственного кода и полезных плагинов. Приведём практические примеры, которые вы сможете сразу внедрить на своём сайте.
Что такое чёрные списки и зачем они нужны в WordPress
Чёрный список — это перечень IP-адресов, пользователей или других параметров, доступ которых к сайту ограничен или полностью заблокирован. В WordPress такие списки помогают:
- Блокировать спамеров и ботов;
- Защищать формы и комментарии от нежелательных сообщений;
- Предотвращать bruteforce-атаки на авторизацию;
- Ограничивать доступ по геолокации или диапазонам IP.
Ручное ведение таких списков неудобно и требует постоянного внимания. Автоматизация — ключ к эффективной защите без лишних затрат времени.
Автоматизация создания чёрных списков IP и пользователей
Для автоматического добавления IP-адресов или пользователей в чёрный список можно использовать хуки WordPress, которые реагируют на подозрительную активность, например, многократные неудачные попытки входа или множество спам-комментариев.
Пример: автоматическое блокирование IP после 5 неудачных попыток входа
Ниже пример функции wpmoney_block_ip_after_failed_logins, которая будет добавлять IP в опцию чёрного списка после 5 неудачных попыток авторизации:
function wpmoney_block_ip_after_failed_logins( $username ) {
$ip = $_SERVER['REMOTE_ADDR'];
$blocked_ips = get_option('wpmoney_blocked_ips', array());
$failed_logins = get_transient('wpmoney_failed_login_' . $ip) ?: 0;
$failed_logins++;
set_transient('wpmoney_failed_login_' . $ip, $failed_logins, 15 * MINUTE_IN_SECONDS);
if ($failed_logins >= 5 && !in_array($ip, $blocked_ips)) {
$blocked_ips[] = $ip;
update_option('wpmoney_blocked_ips', $blocked_ips);
// Можно добавить логирование или уведомления
}
}
add_action('wp_login_failed', 'wpmoney_block_ip_after_failed_logins');Этот код использует transient для подсчёта попыток с одного IP и добавляет его в список блокировки в базе данных.
Проверка и блокировка доступа по IP
Чтобы запретить доступ заблокированным IP, добавьте проверку в init:
function wpmoney_block_blacklisted_ips() {
$ip = $_SERVER['REMOTE_ADDR'];
$blocked_ips = get_option('wpmoney_blocked_ips', array());
if (in_array($ip, $blocked_ips)) {
wp_die('Доступ с вашего IP заблокирован.');
exit;
}
}
add_action('init', 'wpmoney_block_blacklisted_ips');Автоматическое удаление IP из чёрного списка
Статическая блокировка IP не всегда хороша — допустим, пользователь сменил IP или ошибка была ложной. Поэтому нужно очищать список автоматически по времени.
Реализация удаления IP через CRON
Пример функции wpmoney_cleanup_blocked_ips, которая удаляет IP из списка, если прошло более 24 часов с момента блокировки:
function wpmoney_cleanup_blocked_ips() {
$blocked_ips = get_option('wpmoney_blocked_ips', array());
$blocked_times = get_option('wpmoney_blocked_times', array());
$now = time();
foreach ($blocked_ips as $key => $ip) {
if (isset($blocked_times[$ip]) && ($now - $blocked_times[$ip]) > 86400) { // 24 часа
unset($blocked_ips[$key]);
unset($blocked_times[$ip]);
}
}
update_option('wpmoney_blocked_ips', $blocked_ips);
update_option('wpmoney_blocked_times', $blocked_times);
}
add_action('wpmoney_daily_cleanup', 'wpmoney_cleanup_blocked_ips');
if (!wp_next_scheduled('wpmoney_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpmoney_daily_cleanup');
}Чтобы этот код работал, нужно при добавлении IP в список сохранять время блокировки в wpmoney_blocked_times:
// В функции block_ip_after_failed_logins добавить:
$blocked_times[$ip] = time();
update_option('wpmoney_blocked_times', $blocked_times);Использование плагинов для чёрных списков и защита WordPress
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины, которые хорошо интегрируются с автоматизацией и могут расширить функционал:
- Clearfy Pro — позволяет эффективно управлять безопасностью, включая чёрные списки IP и автоматическую блокировку спама. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
- WPCommunity — если у вас сайт с регистрацией пользователей, WPCommunity помогает управлять ролями и доступом, включая фильтрацию по поведению.
- My Popup — можно использовать для уведомлений заблокированным пользователям или предупреждений о блокировке.
Расширенные методы: интеграция с внешними сервисами и API
Для более продвинутой защиты можно интегрировать WordPress с внешними антиспам-сервисами и API, которые предоставляют актуальные базы IP и списки ботов.
Пример: использование API для проверки IP
Можно сделать запрос к внешнему API, например, AbuseIPDB, и при обнаружении подозрительного IP сразу добавлять его в чёрный список:
function wpmoney_check_ip_with_api($ip) {
$api_key = 'ВАШ_API_КЛЮЧ';
$response = wp_remote_get("https://api.abuseipdb.com/api/v2/check?ipAddress={$ip}&maxAgeInDays=90", [
'headers' => [
'Key' => $api_key,
'Accept' => 'application/json'
]
]);
if (is_wp_error($response)) return false;
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (isset($data['data']['abuseConfidenceScore']) && $data['data']['abuseConfidenceScore'] > 50) { // порог
$blocked_ips = get_option('wpmoney_blocked_ips', array());
if (!in_array($ip, $blocked_ips)) {
$blocked_ips[] = $ip;
update_option('wpmoney_blocked_ips', $blocked_ips);
return true;
}
}
return false;
}Вы можете вызывать эту функцию при регистрации, комментариях или входе для дополнительной проверки.
Как вести и мониторить чёрные списки в WordPress
Важно не только создавать и очищать чёрные списки, но и иметь UI для их просмотра и управления. Можно реализовать админ-страницу с таблицей:
- Перечень заблокированных IP;
- Время блокировки;
- Кнопки для ручного удаления из списка;
- Логи блокировок.
Для этого используйте стандартные функции WordPress для добавления меню и страниц, например, add_menu_page и WP_List_Table.
Пример добавления простого меню
function wpmoney_admin_menu() {
add_menu_page('Чёрный список', 'Чёрный список', 'manage_options', 'wpmoney-blacklist', 'wpmoney_blacklist_page');
}
add_action('admin_menu', 'wpmoney_admin_menu');
function wpmoney_blacklist_page() {
$blocked_ips = get_option('wpmoney_blocked_ips', array());
echo '<h1>Заблокированные IP</h1>';
if (empty($blocked_ips)) {
echo '<p>Список пуст</p>';
return;
}
echo '<ul>';
foreach ($blocked_ips as $ip) {
echo '<li>' . esc_html($ip) . '</li>';
}
echo '</ul>';
}Заключение
Автоматизация чёрных списков в WordPress позволяет значительно повысить безопасность и снизить нагрузку на администратора сайта. Использование кода и стандартных хуков вместе с проверкой через API и грамотным управлением в админке — лучший подход для современных проектов.
Если хотите ещё больше упростить процесс, рекомендую обратить внимание на Clearfy Pro — этот плагин умеет автоматически блокировать спам и подозрительных пользователей, а также содержит инструменты для управления безопасностью.