Вопрос автоматического отзыва лицензий WordPress плагинов по IP адресу возникает у многих разработчиков, которые хотят ограничить использование своих продуктов в определённых сетях или предотвратить злоупотребления. В этой статье мы подробно рассмотрим, как реализовать такую систему, какие есть сложности и лучшие практики.
Почему важен отзыв лицензий по IP адресу
Ограничение лицензий по IP адресу позволяет контролировать, с каких сетей или устройств производится активация плагина. Это важно для:
- Предотвращения несанкционированного копирования и использования на множестве сайтов;
- Управления количеством одновременных активаций;
- Повышения безопасности и контроля за распространением продукта.
Однако простое ограничение по IP может вызвать проблемы, если пользователи имеют динамические IP или выходят через прокси, поэтому автоматизация должна учитывать эти особенности.
Как работает отзыв лицензий по IP адресу: базовая логика
Основная идея — хранить в базе данных информацию о зарегистрированных IP адресах для каждой лицензии. При попытке активации:
- Проверяется, совпадает ли текущий IP с разрешёнными;
- Если IP не зарегистрирован и лимит по количеству IP не превышен — добавляем новый IP к лицензии;
- Если лимит достигнут — блокируем активацию;
- При отзыве лицензии по IP — удаляем указанный IP из базы, освобождая место для новых активаций.
Для автоматизации можно настроить cron-задачу, которая будет периодически проверять неактивные IP и отзывать их, освобождая лицензии.
Пример кода: регистрация и отзыв IP адресов для лицензии
Ниже приведён пример функций с префиксом wplicense_, которые демонстрируют базовую работу с IP адресами в контексте лицензий.
function wplicense_add_ip_to_license($license_key, $ip_address) {
$license_data = get_option('wplicense_licenses_' . $license_key, []);
if (!in_array($ip_address, $license_data)) {
// Максимум 3 IP для одной лицензии
if (count($license_data) < 3) {
$license_data[] = $ip_address;
update_option('wplicense_licenses_' . $license_key, $license_data);
return true;
} else {
return false; // Превышен лимит IP
}
}
return true; // IP уже зарегистрирован
}
function wplicense_remove_ip_from_license($license_key, $ip_address) {
$license_data = get_option('wplicense_licenses_' . $license_key, []);
$key = array_search($ip_address, $license_data);
if ($key !== false) {
unset($license_data[$key]);
update_option('wplicense_licenses_' . $license_key, $license_data);
return true;
}
return false;
}
Эти функции можно расширить, добавив проверку времени последней активации IP для автоматического отзыва в случае неактивности.
Автоматический отзыв IP по неактивности с помощью WP Cron
Чтобы не держать навсегда закреплённые IP, можно реализовать автоматический отзыв при отсутствии активности. Для этого:
- Сохраняем время последнего использования IP;
- Периодически проверяем, не превышает ли время неактивности допустимый лимит (например, 30 дней);
- Если превышает — удаляем IP из лицензии.
Пример создания задания WP Cron для отзыва неактивных IP:
function wplicense_schedule_ip_cleanup() {
if (!wp_next_scheduled('wplicense_ip_cleanup_event')) {
wp_schedule_event(time(), 'daily', 'wplicense_ip_cleanup_event');
}
}
add_action('wp', 'wplicense_schedule_ip_cleanup');
function wplicense_ip_cleanup_callback() {
$all_licenses = get_option('wplicense_all_licenses', []);
$now = time();
foreach ($all_licenses as $license_key) {
$ip_data = get_option('wplicense_licenses_' . $license_key, []);
foreach ($ip_data as $ip => $last_active) {
if (($now - $last_active) > 30 * DAY_IN_SECONDS) {
unset($ip_data[$ip]);
}
}
update_option('wplicense_licenses_' . $license_key, $ip_data);
}
}
add_action('wplicense_ip_cleanup_event', 'wplicense_ip_cleanup_callback');
Обратите внимание, что здесь предполагается структура хранения IP с датой последней активности. При интеграции нужно адаптировать логику под конкретный формат.
Практические советы и рекомендации
Для стабильной работы системы отзыва лицензий по IP учтите следующие моменты:
- Используйте кеширование и оптимизированные запросы к базе — частые проверки могут нагрузить сайт;
- Предусмотрите обработку ситуаций с динамическими IP — например, позволяйте менять IP после подтверждения;
- Реализуйте уведомления для пользователей о том, что IP отзывается из-за неактивности;
- Используйте REST API для интеграции с внешними сервисами управления лицензиями;
- Можно дополнительно внедрить двухфакторную авторизацию для повышения безопасности активаций.
Инструменты и плагины, которые помогут
Для реализации и тестирования подобных функций можно использовать плагины и библиотеки:
- Clearfy Pro — для оптимизации и повышения безопасности WordPress;
- Плагины для создания REST API эндпоинтов на базе WordPress;
- WP Crontrol — для управления крон-задачами и отладки;
- Custom code snippets — для быстрого добавления кастомных функций.
Использование этих инструментов ускорит разработку и упростит поддержку системы лицензирования.
Заключение
Автоматизация отзыва лицензий по IP адресу — эффективный способ контроля за использованием WordPress плагинов. Правильная реализация помогает предотвратить пиратство и обеспечивает гибкость управления. Важно тщательно продумать логику работы с IP, учесть динамические адреса и реализовать удобный интерфейс для пользователей.
Если хотите углубиться в тему защиты и лицензирования, рекомендуем изучить материалы на WPSHOP — там много полезных плагинов и решений для разработчиков.