При разработке уникальных алгоритмов, отчетов и обработок для платформы 1С:Предприятие часто возникает необходимость защитить авторские решения от несанкционированного копирования, изменения или нелицензионного использования. Простая установка пароля на модуль формы в современных версиях платформы либо недоступна, либо легко обходится. В этом материале мы подробно разберем эффективные способы защиты бизнес-логики внешних обработок (файлов .epf), начиная от штатных средств платформы и заканчивая продвинутыми архитектурными решениями.
Наиболее надежный штатный метод скрытия исходного кода внешних обработок заключается в использовании механизма создания поставки конфигурации. При этом исходный текст алгоритмов удаляется, а в файле остается только скомпилированный байт-код платформы, который сохраняет полную функциональность, но недоступен для чтения и редактирования в Конфигураторе.
Рассмотрим пошагово, как реализовать этот процесс:
Обработки).Конфигурация — Поставка конфигурации — Настройка поставки.....cf). На этом этапе платформа компилирует модули обработки в байт-код, исключая текстовое представление алгоритмов..cf в чистую информационную базу. Заходим в дерево конфигурации, находим нашу обработку, щелкаем по ней правой кнопкой мыши и выбираем команду Сохранить как внешнюю обработку, отчет....В результате мы получаем файл .epf, который запускается и работает в обычном режиме, но при попытке открыть его модули в Конфигураторе пользователь увидит пустые окна модулей.
Если необходимо оставить код в текстовом виде (например, для выполнения на клиенте или для соответствия с требованиями регламентных процедур), проанализируем метод обфускации. Обфускация — это приведение исходного текста программы к виду, сохраняющему функциональность, но максимально затрудняющему понимание алгоритмов при анализе и декомпиляции.
При использовании специального программного обеспечения для обфускации происходят следующие трансформации:
Разберем разницу на примере. Исходный понятный фрагмент кода:
Функция РассчитатьСкидку(СуммаДокумента, Процент) Экспорт
// Расчет итоговой суммы со скидкой
Результат = СуммаДокумента - (СуммаДокумента * Процент / 100);
Возврат Результат;
КонецФункции
После прохождения процедуры обфускации код принимает трудночитаемый вид, сберегая функциональность:
Функция o0o(o1,o2) Экспорт Возврат o1-(o1*o2/100); КонецФункции
Даже если злоумышленник откроет модуль с таким кодом, его отладка, восстановление структуры и модификация потребуют огромных временных затрат.
Рассмотрим более высокий уровень защиты, применяемый при коммерческом распространении обработок. При таком подходе файл обработки выступает лишь в качестве «тонкого клиента» для сбора параметров и отображения результата, а все критичные расчеты выполняются на стороне сервера разработчика.
Схема взаимодействия выглядит следующим образом:
Поскольку ключевой алгоритм физически не находится на компьютере клиента, скопировать или декомпилировать его технически невозможно.
Для защиты наиболее сложных вычислений алгоритмы можно реализовать на компилируемых языках программирования (C++, Rust) и собрать в виде бинарного файла внешней компоненты (.dll для Windows или .so для Linux).
Внешняя компонента подключается непосредственно в модуле 1С через встроенный механизм:
ПодключитьВнешнююКомпоненту("ОбработкаДанных.dll", "ЗащищенныйМодуль", ТипВнешнейКомпоненты.Native);
ОбъектЗащиты = Новый("AddIn.ЗащищенныйМодуль.ЗащищенныйАлгоритм");
Результат = ОбъектЗащиты.ВыполнитьРасчет(Параметры);
Декомпиляция бинарного кода обратно в исходный текст на C++ представляет собой крайне сложную задачу, что обеспечивает высокий уровень безопасности авторского права.
Чтобы предотвратить несанкционированное копирование обработки между различными информационными базами и организациями, в код встраивают проверки индивидуальных параметров системы:
УникальныйИдентификатор() полученой из строки соединения с базой, выполняется проверка на соответствие разрешенному идентификатору.Проанализируем важные нюансы, которые необходимо учитывать при выборе метода защиты внешних обработок:
1. Зависимость байт-кода от версии платформы:
При компиляции обработки через поставку конфигурации (Способ 1) полученный байт-код привязывается к версии платформы 1С:Предприятие. При крупных обновлениях релизов платформы у клиента обработка может перестать открываться с ошибкой считывания модуля. В этом случае потребуется пересборка обработки на актуальном релизе платформы.
2. Особенности управляемых форм:
В управляемом приложении клиентские процедуры формы исполняются на стороне тонкого клиента. Защитить клиентский код методом поставки без исходников сложнее. Поэтому рекомендуется переносить всю ключевую бизнес-логику и тяжелые расчеты в **Модуль объекта** обработки, который исполняется исключительно на сервере, оставляя в модуле формы только минимальный интерфейсный код.
3. Ограничения в сервис-облаках (1С:Предприятие через браузер / 1С:Fresh):
Обратите внимание, что сервисы модели SaaS (включая 1С:Fresh) предъявляют жесткие требования к безопасности. Внешние обработки с полностью закрытым кодом (без исходников), обфусцированным текстом или внешними компонентами не пройдут обязательный аудит безопасности и не будут допущены к публикации в сервисе.