В статье кратко рассмотрим как без создания собственного облачного сервера защитить программу использующую VK API от незаконного использования и несанкционированного распространения.
Графическая схема
Принцип работы
Если программное обеспечение никак не связано с Вконтакте, то крупные разработчики используют HASP, однако, это дорого, сложно для приобретения и необходимо разрабатывать еще приложения которые будут запускаться внутри HASP ключей.
Данная статья про защиту программ, разрабатываемых индивидуальными разработчиками или мелкими компаниями. Логично разместить свой сервер в Интернете и при помощи него осуществлять лицензирование программы, но даже это не дает гарантий, достаточно пропатчить программу. Рассмотрим как это делают многие просто размещая критичные или сложные запросы в виде хранимых процедур, код которых надежно хранится на серверах Вконтакте и недоступен программе которую вы распространяете:
Хранимые процедуры позволяют исполнять код на стороне сервера API аналогично методу execute, но без передачи кода процедуры по сети.
Для дополнительной защиты хранимая процедура должна помимо выполнения еще проверять запустил ли ее пользователь который приобрел лицензию, для этого достаточно выполнить вначале хранимой процедуры, например, такой код:
var allowed_users = ",id1,id2,id3,id99999999,";//список пользователей которые приобрели лицензию
//Ищем среди allowed_users vk_id пользователя запустившего процедуру
var c = allowed_users.indexOf("id"+API.users.get({})@.id+",");//поиск по массиву не работает в хранимых процедурах :(
var res;
if(c>0)
{//Если запустил один из разрешенных пользователей
//Здесь тело вашей процедуры
res = ...
return res;
}
else return "License not acquired";
return "error"
В качестве аналога можно получать allowed_users с wiki страницы или осуществлять проверку другим способом.
По истечению срока действия лицензии у пользователя, он просто удаляется из allowed_users.
Заключение
- Можно автоматизировать процесс редактирования списка пользователей при хранении списка allowed_users вне хранимой процедуры
- Простая реализация
- Не подходит для многопользовательского либо требовательного к производительности проекта
- Замедляет выполнение хранимой процедуры
- Зависимо от доступности и ограничений Вконтакте
- Может быть заблокировано Вконтакте
- Реализуемо в любом сервисе обладающим аналогами хранимых процедур Вконтакте
Автор: Сергей Голяков