Как установить ограничение на использование лицензии WordPress плагинов по IP адресу

В современном развитии систем лицензирования WordPress плагинов часто возникает задача ограничить использование лицензии не только по количеству активаций, но и по IP адресу. Это помогает предотвратить массовое пиратство и несанкционированное распространение плагина. В этой статье подробно рассмотрим, как реализовать такое ограничение своими силами, используя возможности WordPress и PHP.

Почему важно ограничивать лицензии по IP адресу

Ограничение лицензий по IP адресу позволяет:

  • Контролировать количество уникальных пользователей вашей лицензии.
  • Защищать плагин от массового использования на разных серверах с одной лицензией.
  • Уменьшать риски распространения нелегальных копий.

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

Какие сложности могут возникнуть при ограничении по IP

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

Также, если плагин используется на сервере с прокси или балансировкой нагрузки, IP может быть не единственным идентификатором.

Пример реализации ограничения по IP в системе лицензирования WordPress плагина

Рассмотрим простой пример, как добавить проверку IP на стороне сервера при валидации лицензии.

Для начала нужно расширить структуру хранения лицензий, добавив поле для хранения разрешённых IP адресов. Это можно реализовать в базе данных или в файле лицензии на сервере.

Допустим, у нас есть функция wplicense_check_license($license_key, $current_ip), которая проверяет валидность лицензии и IP.

function wplicense_check_license($license_key, $current_ip) {
    // Получаем данные лицензии из базы или файла
    $license_data = wplicense_get_license_data($license_key);
    if (!$license_data) {
        return false; // лицензия не найдена
    }

    // Проверяем срок действия лицензии
    if (strtotime($license_data['expires']) < time()) {
        return false; // лицензия истекла
    }

    // Проверяем разрешённые IP
    $allowed_ips = $license_data['allowed_ips']; // массив IP
    if (!in_array($current_ip, $allowed_ips)) {
        return false; // IP не разрешен
    }

    return true; // лицензия действительна
}

В этом примере мы предполагаем, что при выдаче лицензии владелец указывает список IP адресов, на которых плагин может активироваться.

Как получить IP клиента в WordPress плагине

Для корректного получения IP адреса пользователя используйте следующую функцию:

function wplicense_get_client_ip() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // Может содержать список IP через запятую
        $ip_list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        return trim($ip_list[0]);
    } else {
        return $_SERVER['REMOTE_ADDR'];
    }
}

Эта функция учитывает различные заголовки, которые могут передавать IP при использовании прокси или CDN.

Автоматическое добавление IP при активации лицензии

Чтобы облегчить пользователям процесс активации, можно реализовать механизм, который при первой активации лицензии автоматически добавляет текущий IP в разрешённый список, если он ещё не добавлен.

function wplicense_activate_license($license_key) {
    $current_ip = wplicense_get_client_ip();
    $license_data = wplicense_get_license_data($license_key);

    if (!$license_data) {
        return ['error' => 'Лицензия не найдена'];
    }

    $allowed_ips = $license_data['allowed_ips'];
    if (!in_array($current_ip, $allowed_ips)) {
        // Добавляем новый IP
        $allowed_ips[] = $current_ip;
        $license_data['allowed_ips'] = $allowed_ips;
        wplicense_save_license_data($license_key, $license_data);
    }

    return ['success' => true];
}

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

Ограничение максимального количества IP

Добавьте проверку длины массива IP перед добавлением нового:

if (count($allowed_ips) >= $license_data['max_ips']) {
    return ['error' => 'Превышено максимальное количество разрешённых IP'];
}

Это позволит контролировать число одновременных пользователей.

Интеграция с WooCommerce и плагинами лицензирования

Если вы продаёте лицензии через WooCommerce, можно связать метаданные заказа с IP адресами и использовать их для проверки активаций. Например, плагин Clearfy Pro предлагает расширенные настройки безопасности, которые помогут реализовать дополнительные фильтры по IP.

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

Резюме и рекомендации по безопасности

Ограничение лицензий по IP — эффективный способ защитить ваш продукт от нелегального использования. Однако важно:

  • Обеспечить удобный интерфейс для управления разрешёнными IP у конечного пользователя.
  • Учитывать особенности динамических IP и прокси.
  • Информировать пользователя о причинах блокировки при превышении лимита IP.
  • Использовать безопасное хранение данных лицензий и защиту API от взлома.

Если вы хотите упростить задачу, обратите внимание на комплексные решения для лицензирования, которые поддерживают IP-ограничения и интеграцию с WordPress, например, Expert Review для контроля доступа и обзоров.

Решение проблем с автообновлениями WooCommerce плагинов при смене домена
16.06.2026
Как сделать автотестирование лицензий WordPress плагинов
05.01.2026
Как добавить ограничение на количество активаций лицензии WordPress плагинов по ролям пользователей
06.04.2026
Как защитить лицензии WordPress плагинов от пиратского использования
26.01.2026
Как установить ограничение на лицензию WordPress плагина по геолокации
20.04.2026