Ограничение лицензии плагина по домену — эффективный способ предотвратить несанкционированное использование и распространение вашего продукта. В этой статье разберём, как реализовать такую защиту на практике, используя собственный лицензионный сервер и проверку доменного имени сайта. Вы получите конкретные примеры кода и рекомендации по интеграции с популярными плагинами для управления лицензиями.
Зачем нужно ограничивать лицензию по домену
Ограничение лицензии по домену позволяет гарантировать, что приобретённый плагин будет работать только на том сайте, для которого он был куплен. Это снижает риск пиратства и увеличивает доход разработчика. Кроме того, такой подход упрощает поддержку и контроль за количеством активных установок.
В отличие от ограничений по IP или количеству активаций, проверка домена более стабильна и не зависит от технических изменений на стороне пользователя, например, смены IP-адреса.
Также это позволяет легко реализовать отслеживание лицензий и автоматическую блокировку при обнаружении нарушений.
Как определить домен сайта в WordPress
Для ограничения лицензии сначала нужно получить текущий домен сайта, на котором активирован плагин. В WordPress это можно сделать с помощью стандартных функций:
function wplicense_get_current_domain() {
$site_url = get_site_url();
$parsed_url = parse_url($site_url);
return $parsed_url['host'] ?? '';
}Эта функция возвращает доменное имя без протокола и пути, например, example.com.
Важный момент — если у сайта используется мультисайт, то можно получить домен основной или текущей сети в зависимости от требований.
Реализация проверки домена на лицензионном сервере
Лицензионный сервер должен хранить связку лицензия — разрешённые домены. При активации и периодической проверке плагин отправляет запрос с текущим доменом и ключом лицензии. Сервер возвращает ответ, разрешён ли запуск на этом домене.
Пример запроса на сервер (используем REST API):
function wplicense_check_license_domain($license_key, $domain) {
$response = wp_remote_post('https://license-server.example.com/api/check', [
'body' => [
'license_key' => $license_key,
'domain' => $domain
]
]);
if (is_wp_error($response)) {
return false;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
return $data['valid'] ?? false;
}На стороне сервера нужно реализовать проверку, что домен присутствует в списке разрешённых для данной лицензии. Если да — вернуть valid: true, иначе — false.
Структура базы данных на сервере
Для хранения лицензий и доменов можно использовать таблицу с полями:
- license_key — уникальный ключ
- allowed_domains — список доменов (например, JSON-массив)
- status — активна или заблокирована
- expiration_date — срок действия лицензии
При проверке сервер парсит allowed_domains и сверяет с запрошенным доменом.
Пример интеграции ограничения в плагине WordPress
Добавим проверку домена при активации плагина и при каждом запуске:
class Wplicense_License_Manager {
private $license_key;
public function __construct($license_key) {
$this->license_key = $license_key;
add_action('init', [$this, 'validate_domain']);
}
public function validate_domain() {
$domain = wplicense_get_current_domain();
$valid = wplicense_check_license_domain($this->license_key, $domain);
if (!$valid) {
deactivate_plugins(plugin_basename(__FILE__));
wp_die('Лицензия недействительна для текущего домена. Плагин деактивирован.');
}
}
}Такой подход гарантирует, что плагин не будет работать на запрещённых доменах. Важно кэшировать результаты проверки и не делать запросы при каждом хите, чтобы не создавать нагрузку.
Рекомендации по плагинам для управления лицензиями
Если не хотите создавать лицензионный сервер с нуля, можно использовать готовые решения с поддержкой ограничения по домену:
- Clearfy Pro — предлагает расширенные настройки безопасности и контроля лицензий с возможностью ограничения по домену.
- Expert Review — плагин с системой лицензирования и ограничением по доменам, удобный для создания коммерческих продуктов.
Оба плагина позволяют быстро внедрить защиту без создания собственного сервера и API.
Советы по улучшению защиты лицензий по домену
Чтобы усложнить обход ограничения, можно:
- Шифровать и подписывать данные при передаче между плагином и сервером.
- Проверять не только домен, но и URL, IP, User-Agent, чтобы исключить подделку.
- Добавить механизмы автоматического отзыва лицензий при нарушениях.
- Использовать двухфакторную авторизацию для админ-панели плагина.
Также стоит учитывать, что некоторые пользователи могут использовать поддомены или зеркала, поэтому продумайте, как учитывать такие варианты в списке разрешённых доменов.
Заключение
Ограничение лицензий по домену — мощный инструмент защиты вашего продукта. Реализация требует создания связки между плагином и лицензионным сервером, а также грамотной архитектуры проверки и хранения данных. Приведённые примеры и рекомендации помогут вам быстро реализовать такую систему и повысить безопасность ваших WordPress плагинов.