Автоматическое удаление IP из черного списка в WordPress по времени

В администрировании WordPress часто возникает задача блокировки IP-адресов, которые вызывают подозрительную активность или атаки. Но что делать, если блокировка должна быть временной, и IP нужно автоматически удалять из черного списка спустя заданное время? В этой статье подробно разберем, как реализовать автоматическое удаление IP из черного списка на WordPress с помощью кода и подскажем, какие плагины помогут упростить задачу.

Что такое временный черный список IP и зачем его использовать

Черный список IP — это механизм, который запрещает доступ на сайт с определенных адресов. Он помогает защитить ресурс от нежелательного трафика, спама, брутфорс-атак и других угроз.

Однако жёсткая блокировка навсегда не всегда оправдана. Часто нужна временная блокировка, чтобы дать IP-адресу «остыть» или прекратить подозрительную активность на некоторое время. Автоматическое удаление IP из черного списка позволяет:

  • Снизить нагрузку на базу данных и файлы с блокировками;
  • Избежать ситуации, когда легитимный пользователь заблокирован навсегда;
  • Автоматизировать процесс управления безопасностью без постоянного ручного контроля.

Такой функционал полезен для сайтов с высокой посещаемостью и риском автоматических атак.

Реализация временного черного списка на WordPress: структура и логика

Для реализации временной блокировки IP нам понадобится:

  1. Хранить IP-адреса с меткой времени, когда они были заблокированы;
  2. Проверять время блокировки при каждом заходе;
  3. Автоматически убирать IP из списка, если срок блокировки истек.

Рассмотрим простой пример реализации на базе функций WordPress и собственного хранения данных в таблице базы данных.

Создание таблицы для хранения заблокированных IP

Используем функцию dbDelta для создания таблицы при активации плагина или темы. Таблица будет содержать IP и timestamp блокировки.

function wpall_create_blacklist_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpall_ip_blacklist';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      ip varchar(45) NOT NULL,
      blocked_at datetime NOT NULL,
      PRIMARY KEY  (id),
      UNIQUE KEY ip (ip)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpall_create_blacklist_table');

Добавление IP в черный список с текущим временем

Функция для добавления IP с отметкой времени блокировки.

function wpall_add_ip_to_blacklist($ip) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpall_ip_blacklist';
    $now = current_time('mysql');

    $wpdb->replace(
        $table_name,
        [
            'ip' => $ip,
            'blocked_at' => $now
        ],
        ['%s', '%s']
    );
}

Проверка IP и автоматическое удаление по времени

При каждой загрузке сайта проверяем IP посетителя, если он в черном списке и время блокировки не истекло — блокируем доступ. Если время блокировки прошло — удаляем IP.

function wpall_check_ip_blacklist() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpall_ip_blacklist';
    $ip = $_SERVER['REMOTE_ADDR'];
    $blocked = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE ip = %s", $ip));

    if ($blocked) {
        $blocked_time = strtotime($blocked->blocked_at);
        $now = current_time('timestamp');
        $block_duration = 3600; // Время блокировки в секундах, например 1 час

        if (($now - $blocked_time) > $block_duration) {
            // Время блокировки истекло, удаляем IP
            $wpdb->delete($table_name, ['ip' => $ip], ['%s']);
        } else {
            // Блокируем доступ
            wp_die('Доступ с вашего IP временно заблокирован. Попробуйте позже.');
            exit;
        }
    }
}
add_action('init', 'wpall_check_ip_blacklist');

Примеры плагинов с поддержкой временного черного списка

Если не хочется писать код самостоятельно, можно использовать готовые решения:

  • Wordfence Security — мощный плагин безопасности с функцией блокировки IP и возможностью настроить время блокировки в настройках.
  • All In One WP Security & Firewall — предлагает управление черными списками IP, включая временные блокировки.
  • Clearfy Pro — среди множества оптимизаций и улучшений безопасности есть функции управления доступом, которые можно использовать для временных блокировок. Подробнее на wpshop.ru.

Эти плагины позволяют управлять безопасностью без глубокого погружения в код, но для кастомных задач часто удобнее реализовать свой механизм.

Советы по безопасности и производительности при реализации черного списка

1. Храните IP в отдельной таблице, чтобы не нагружать основную базу данных.

2. Ограничивайте длительность блокировки — постоянные блокировки могут привести к ошибочным блокам и ухудшению опыта пользователей.

3. Используйте кеширование, чтобы не делать запросы к базе при каждом заходе, особенно если список большой.

4. Регулярно очищайте таблицу блокировок от просроченных записей с помощью WP Cron или серверных задач.

5. Логируйте причины блокировок, чтобы понимать и анализировать угрозы, а также улучшать правила.

Автоматизация очистки устаревших записей из черного списка

Для удаления просроченных IP можно добавить WP Cron задачу, которая будет запускаться ежедневно:

function wpall_schedule_blacklist_cleanup() {
    if (!wp_next_scheduled('wpall_cleanup_blacklist_hook')) {
        wp_schedule_event(time(), 'daily', 'wpall_cleanup_blacklist_hook');
    }
}
add_action('wp', 'wpall_schedule_blacklist_cleanup');

function wpall_cleanup_blacklist() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpall_ip_blacklist';
    $expiration = date('Y-m-d H:i:s', current_time('timestamp') - 3600); // 1 час назад
    $wpdb->query($wpdb->prepare("DELETE FROM $table_name WHERE blocked_at < %s", $expiration));
}
add_action('wpall_cleanup_blacklist_hook', 'wpall_cleanup_blacklist');

Так вы избавитесь от устаревших блокировок без ручного вмешательства.

Как создать собственный виджет в WordPress с примерами кода
14.11.2025
Как создать автоматические резервные копии базы данных WordPress с помощью PHP
03.01.2026
WordPress авторизация по одноразовому паролю (OTP) с практическим применением
30.01.2026
Оптимизация базы данных WordPress: практические методы и примеры
11.11.2025
Как использовать настройки Redis для ускорения WordPress
13.12.2025