@moonsoon даю вам совет, будете делать уникальный дизайн , не делайте его на готовом интерфейсе (в плане свои видения дизайна костылять на готовом дизайне), лучше с нуля все, так меньше времени потребуется потом. Не совершайте моих ошибок
Свой сервер проверки BAS лицензий
-
Решил выложить свое решение для проверки лицензий в скомпилированных BAS скриптах.
Для чего это нужно?
Когда пользователь запускает BAS скрипт, защищенный лицензией, проверка лицензии тригерится только в момент запуска. В процессе работы шаблона лицензия может истечь, но уже запущенный скрипт продолжит работать, пока не будет остановлен.
Решение позволяет проверять лицензии прямо в рантайме, во время работы скрипта.
Компоненты
- сервер проверки лицензий (ссылка на репозиторий);
- скрипт, который встраивается в шаблон BAS и проверяет через заданный интервал времени не истекла ли лицензия.
Как это работает?
- Раз в час (или любой заданный интервал) шаблон, запущенный клиентом, отправляет запрос на ваш сервер.
- Сервер при необходимости авторизуется с вашим логином и паролем в админ панели BAS, решая капчу. Сохраняет сессию авторизации, чтобы не входить повторно.
- Сервер отправляет запрос в BAS и получает данные лицензии.
- Клиент получает данные лицензии. Если лицензия истекла, то принудительно останавливает работу.
Зачем нужен сервер и почему нельзя отправлять запрос из шаблона напрямую к API BAS?
- Это неприемлемо с точки зрения безопасности. Запрос легко подделать, узнав данные запроса посредством любого MITM прокси. Далее достаточно подменить домен BAS'а на локалхост и поднять свой API, который всегда будет возвращать ответ, что лицензия валидна.
- Нельзя отслеживать статистику.
Как свой сервер позволяет решить проблемы безопасности?
Данные ответа сервера защищены ассиметричным шифрованием. Сервер подписывает тело ответа приватным ключом и передает подпись в заголовке
X-Signature. Клиент (шаблон BAS) валидирует подпись публичным ключом.Помимо этого в теле ответа передается:
- Уникальный
request_id, который генерируется с каждым запросом, чтобы предотвратить reply атаки. Без этого можно было бы один раз получить тело запроса и подпись и, подделав запрос на своем домене, отправить те же данные. Но благодаря уникальному токену, body всегда будет уникальный и подпись всегда будет подписывать новое тело запроса. - Таймстамп в поле
created_at, где передается текущее время. Клиент сравнивает переданный таймстамп со своим текущим временем и, если время не сходится (пользователь перевел часы у себя на ПК), считает запрос скомпрометированным.
Мониторинг
Вы можете мониторить запросы и ошибки через Grafana.
Как установить сервер?
Процесс установки описан в Readme.
Как встроить код клиента в свои шаблоны?
Смотрите examples в репозитории.
Зачем изобретать велосипед?
Понимаю, что можно сделать свой собственный сервер лицензий, не используя BAS. Но, возможно, вы, как и я, уже имеете шаблоны с созданными пользователями и не хотите переносить данные лицензий. К тому же, это проще 🔥.
-
-
@val2020 said in Свой сервер проверки BAS лицензий:
Дико заранее извиняюсь, но хотелось бы понять как защищен код для проверки лицензии, если допустим скрипт открытый, без премиум BAS? Что мешает открыть скрипт и удалить все проверки, или это решение только для премиум пользователей и закрытых скриптов?
Вы думаете мы на форуме BAS позволили бы жить теме, которая рассказывает как бесплатно реализовать аналог платного функционала BAS?
-
@val2020 этот "скрипт" не имплементирует функционал BAS по защите шаблонов лицензией. Он проверяет существует ли лицензия у скрипта во время работы шаблона. Из коробки BAS проверяет лицензию только при запуске скрипта. Но если шаблон уже запущен и лицензия истекла, он продолжит работать. Этот скрипт для этого и предназначен - проверять лицензию в рантайме, в реальном времени. Функционал лицензирования баса он не заменяет, а дополняет.
Насколько помню, я с @Fox обсуждал правомерность выкладывания этого скрипта в паблик, он дал согласие. Думал, из описания всем все понятно.
-
@thepappo said in Свой сервер проверки BAS лицензий:
Из коробки BAS проверяет лицензию только при запуске скрипта.
Что в общем то капец какая недоработка. Время идет, а каждый разраб(кто в теме) продолжает пилить свой велосипед на это.
-
@kodes said in Свой сервер проверки BAS лицензий:
Не проще получить в начале дату истечения лицензии скрипта. И потом в шаблоне сравнивать ее с текущей? Зачем велосипед?
А если пользователь продлил лицензию во время работы скрипта?
-
-
@kodes said in Свой сервер проверки BAS лицензий:
Не проще получить в начале дату истечения лицензии скрипта. И потом в шаблоне сравнивать ее с текущей? Зачем велосипед?
Чтобы получить дату истечения скрипта, нужно также авторизоваться в BAS, сохранить сессию. При этом безопасно это сделать можно только на бэкенде, который предоставляет API для клиентской части.