Как ограничить срок работы внешней обработки и защитить код от несанкционированного использования?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При передаче внешних обработок клиентам на предварительное тестирование часто возникает задача ограничить время их работы или защитить алгоритмы от несанкционированного копирования до момента окончательной оплаты. Разберем типичные ошибки при попытке закрыть обработку программно, проанализируем, почему простая проверка даты не дает гарантированного результата, и рассмотрим надежные архитектурные подходы к решению этой задачи.

Ошибки при попытке блокировки из модуля объекта

Рассмотрим распространенную ошибку, возникающую при попытке написать проверку даты в модуле объекта обработки. Обращение к свойству ЭтаФорма доступно исключительно в модуле формы. Если попытаться вызвать метод ЭтаФорма.Закрыть() в модуле объекта, платформа выдаст исключение во время выполнения.

Если требуется корректно запретить открытие формы при наступлении определенной даты, проверку необходимо размещать в обработчиках событий формы. Проанализируем правильный пример для управляемой формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    СрокДействия = Дата(2025, 05, 01);
    Если ТекущаяДатаСеанса() > СрокДействия Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Срок действия демонстрационной версии обработки истек.";
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры

Установка параметра Отказ = Истина в процедуре ПриСозданииНаСервере или ПриОткрытии отменяет открытие формы без возникновения критических ошибок в интерфейсе. Если же логика обработки вызывается программно без открытия формы через экспортные процедуры модуля объекта, то для отмены выполнения следует использовать генерацию исключения:


Процедура ВыполнитьДействие() Экспорт

    СрокДействия = Дата(2025, 05, 01);
    Если ТекущаяДатаСеанса() > СрокДействия Тогда
        ВызватьИсключение "Использование обработки заблокировано: истек тестовый период.";
    КонецЕсли;
    
    // Основной рабочий алгоритм
    
КонецПроцедуры

Почему штатный пароль на модуль и проверка даты не защищают код?

Выясним причину, по которой простая проверка даты в сочетании с установкой пароля на модуль не является надежной защитой:

  1. Слабость встроенной защиты паролем: Установка пароля в конфигураторе не шифрует исходный код надежным криптографическим алгоритмом. Структура файла внешней обработки (EPF) устроена так, что пароль или извлекается, или снимается сторонними утилитами за считанные секунды. Любой специалист с доступом к конфигуратору сможет убрать проверку даты из кода.
  2. Откат системного времени: Простая проверка ТекущаяДата() легко обходится пользователем путем перевода системных часов на клиентском компьютере или сервере назад.

Если все же используется ограничение по времени, следует проверять перевод часов назад. Для этого при каждом запуске сохраняют время в ХранилищеОбщихНастроек. Если дата текущего сеанса меньше сохраненной даты предыдущего запуска, значит, время было изменено вручную, и запуск следует блокировать.

Способ 1. Ограничение объема данных (демо-режим)

Наиболее практичный и распространенный способ демонстрации функционала без риска потери оплаты — вырезание части возможностей. Вместо ограничения по сроку обработка передается в режиме предпросмотра:

  1. Ограничение по строкам: Обработка выполняет алгоритм только для первых 3–5 строк табличной части или загружаемого документа.
  2. Блокировка проведения: Отключается проведение созданных документов или запись изменений в информационную базу. Пользователь видит результаты расчета в таблице на форме, но применить их в учете не может.
  3. Наложение водяных знаков: В печатных формах или формируемых отчетах выводятся надписи о демонстрационном режиме, перекрывающие ключевые реквизиты.

Такой подход полностью исключает полезную эксплуатацию разработки в рабочей базе до передачи полноценной версии, даже если клиент снимет пароль с модуля.

Способ 2. Вынос бизнес-логики на внешний Web-сервис

Если необходимо предоставить клиенту полнофункциональную версию на ограниченный срок, надежным архитектурным решением является вынос ключевых расчетов на собственный удаленный сервер (SaaS-подход):

  1. В самой внешней обработке 1С остается только пользовательский интерфейс, сбор входных параметров и отображение результата.
  2. Обработка формирует запрос к вашему внешнему веб-сервису через объекты HTTPСоединение и HTTPЗапрос.
  3. Сервер проверяет наличие активной подписки или срок демо-доступа, выполняет расчеты и возвращает готовый ответ в формате JSON.

При таком подходе исходный код ключевого алгоритма физически не попадает на компьютер клиента, а доступ отключается разработчиком на стороне сервера в любой момент.

Способ 3. Использование расширений конфигурации без исходного кода

Если конфигурация клиента работает в режиме совместимости с версиями платформы 8.3.9 и выше, альтернативой внешней обработке может стать расширение конфигурации (файл с расширением .cfe).

Платформа 1С поддерживает механизм поставки расширений без исходных текстов модулей. При выгрузке расширения разработчик может снять флаги поставки исходного кода, что делает декомпиляцию и изменение алгоритмов клиентом значительно более сложной задачей по сравнению с обычным файлом EPF.

Способ 4. Обфускация кода и внешние компоненты

Рассмотрим дополнительные методы защиты кода, упомянутые при обсуждении задачи:

  1. Обфускация: Преобразование исходного текста модуля специализированными программами (переименование переменных и функций в бессмысленные наборы символов, стирание форматирования, усложнение логических ветвлений). Это не предотвращает выполнение кода, но делает его анализ и модификацию крайне трудоемкими.
  2. Внешние компоненты (DLL / Native API): Вынос критических функций проверки лицензии и выполнения алгоритмов в скомпилированную динамическую библиотеку на языках C++ или Rust. Компонента подключается в 1С через метод ПодключитьВнешнююКомпоненту.

Для надежного контроля демонстрационного периода рекомендуется комбинировать ограничение функционала (демо-режим) с выносом критических расчетов на веб-сервисы, не полагаясь исключительно на установку пароля в файлах EPF.

← На главную