wpmoney.ru wordpress WP Money

Автоматическое создание и удаление чёрных списков в WordPress

В современном 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 — этот плагин умеет автоматически блокировать спам и подозрительных пользователей, а также содержит инструменты для управления безопасностью.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше