Защита внешней обработки 1С от копирования, правки и опасных действий в базе
Содержание
Защитить обработку 1С полностью нельзя: файл .epf открывается в Конфигураторе, а любую закрытую часть кода при желании можно разобрать. Реальная защита строится слоями: закрыть исходный текст, привязать работу к лицензии, проверять целостность файла, ограничить права в базе и закрепить всё договором. Каждый слой поднимает цену взлома — и вместе они делают его невыгодным.
Вопрос защиты обработки 1С имеет две стороны. Разработчик бережёт свой код и деньги. Владелец базы бережёт данные: внешняя обработка без ограничений может прочитать, изменить и удалить что угодно. Ниже разобраны обе задачи, потому что надёжность и безопасность данных зависят от них одинаково.
С чего начать: что именно нужно защитить
Перед выбором инструмента ответьте себе на три вопроса. От ответов зависит, какие слои нужны, а какие — лишняя работа.
- 🔒 Код — не хотите, чтобы алгоритм скопировали или переделали под себя.
- 💳 Деньги — обработка продаётся, и нужно, чтобы её не запускали без оплаты.
- 🛡️ Данные — обработку пишет подрядчик или скачали из интернета, и база не должна пострадать.
| Метод | Что закрывает | Стойкость | Минусы |
|---|---|---|---|
| Пароль на модуль | Просмотр кода | Низкая | Снимается сторонними утилитами |
| Поставка без исходных текстов | Просмотр и правка кода | Средняя | Работает для модулей конфигурации, не для отдельного .epf |
| Логика на своём сервере | Код и лицензию | Высокая | Нужен интернет и свой сервис |
| СЛК или аппаратный ключ | Лицензию | Высокая | Стоимость, сложнее поддержка |
| Хеш и версия файла | Подмену файла | Высокая | Не защищает от копирования |
| Безопасный режим и права | Данные базы | Высокая | Ограничивает возможности обработки |
| Договор | Юридические права | — | Работает только в суде или переговорах |
Встроенные средства платформы 1С для защиты кода
Платформа даёт два штатных способа спрятать текст модуля. Оба полезны, но ни один не делает код недоступным для упорного специалиста.
Пароль на модуль
В Конфигураторе откройте модуль объекта или формы обработки. В меню Текст есть команда установки пароля. После сохранения текст модуля шифруется, и без пароля его не открыть в редакторе.
Плюс — быстро и бесплатно. Минус — защита слабая: утилиты для разбора файлов 1С снимают такой пароль без особого труда. Годится, чтобы коллега случайно не «подправил» модуль, но не против целенаправленного копирования.
Поставка без исходных текстов
Если обработка встроена в конфигурацию, её модули можно отдать без исходников. Путь: Конфигурация → Поставка конфигурации → Настройка поставки. Для нужных модулей укажите поставку без исходных текстов, затем создайте файлы поставки .cf или .cfu.
В такой поставке модуль хранится в скомпилированном виде. Код выполняется, но в Конфигураторе его не прочитать. Типовой приём для внешней обработки:
- Вынести «ценную» часть алгоритма в общий модуль своей конфигурации.
- Поставить этот модуль без исходных текстов.
- В самой внешней обработке оставить форму и вызовы экспортных процедур.
Сохраните у себя полную версию с исходниками. Восстановить текст модуля из поставки без исходников штатно нельзя — потеряете оригинал, потеряете проект.
Ключи защиты и программные лицензии
Ключи HASP, которые поставляет фирма 1С, защищают лицензию на саму платформу. К вашей обработке они отношения не имеют: проверить «наличие лицензии 1С» — не значит защитить свою разработку.
Для собственной лицензии есть три рабочих варианта.
Система лицензирования и защиты конфигураций (СЛК)
СЛК — продукт фирмы 1С для разработчиков тиражных решений. Работает так: часть кода выполняется внутри защищённой среды, а лицензия хранится в аппаратном или программном ключе. Без ключа защищённые функции не вызываются, и подменить проверку в модуле нельзя — её нет в открытом виде.
Подходит тем, кто продаёт решение десяткам клиентов. Для одной обработки за небольшие деньги это избыточно.
Сторонние аппаратные ключи
Ключи Guardant или Sentinel подключают через внешнюю компоненту. Компонента общается с ключом, а обработка вызывает её методы. Главная проблема — сама проверка: если она в открытом модуле, условие Если Не ЛицензияЕсть Тогда просто вырезают. Поэтому ключ имеет смысл только вместе с закрытым кодом или с шифрованием части данных ключом.
Проверка лицензии на своём сервере
Самый надёжный способ для небольшого разработчика. Обработка при запуске отправляет на ваш сервис код лицензии и идентификатор базы, а в ответ получает разрешение или даже готовый результат расчёта.
Соединение = Новый HTTPСоединение("license.example.ru", 443, , , , 10,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/api/check?key=" + КодЛицензии);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ВызватьИсключение "Лицензия не подтверждена. Обратитесь к разработчику.";
КонецЕсли;
Сама проверка тоже вырезается. Защита появляется, когда сервер возвращает то, без чего обработка бесполезна: формулу, справочные данные, результат вычисления. Тогда копия без лицензии просто не работает.
Если обработка регистрируется в безопасном режиме, доступ в интернет ей закрыт. Для серверной проверки нужно разрешение через профиль безопасности или регистрация без безопасного режима — согласуйте это с администратором базы.
Шифрование и обфускация кода обработки
Обфускация — это запутывание кода: переменные получают бессмысленные имена, процедуры дробятся, добавляются ложные ветки. Программа работает так же, но читать её тяжело.
Для языка 1С есть сторонние обфускаторы. Что от них ждать:
- ✅ скопировать алгоритм «как есть» становится долго и дорого;
- ✅ мелкие доработки чужими руками почти исключены;
- ❌ отладка у клиента превращается в мучение — сообщения об ошибках указывают на нечитаемые строки;
- ❌ после обфускации код может работать медленнее, а некоторые инструменты дают ошибки на сложных конструкциях.
Шифрование уместно для данных внутри обработки: макетов, настроек, справочных таблиц. Ключ расшифровки хранят на сервере лицензий или в аппаратном ключе. Если ключ лежит в том же файле — это не шифрование, а видимость.
Прежде чем отдать обфусцированную версию, прогоните на ней все сценарии в тестовой базе. Ошибку в запутанном коде потом придётся искать по оригиналу.
Контроль целостности и версии обработки
Целостность защищает не автора, а пользователя. Задача — убедиться, что запускается именно тот файл, который проверили, а не подменённый или «доработанный» кем-то по дороге.
Версия в сведениях об обработке
Если в базе есть библиотека стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11 и другие типовые), обработку регистрируют как дополнительную. Для этого в модуле объекта нужна экспортная функция СведенияОВнешнейОбработке():
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.1.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0.3";
ПараметрыРегистрации.БезопасныйРежим = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Поле Версия видно в карточке обработки. Поднимайте номер при каждом изменении: так сразу понятно, какая редакция стоит у клиента и не подменили ли её на старую.
Контрольная сумма файла
Перед передачей посчитайте хеш файла и отправьте его заказчику отдельно от самого файла — например, в письме или договоре. Заказчик сверяет сумму перед установкой.
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.ДобавитьФайл(ПутьКФайлу);
КонтрольнаяСумма = Base64Строка(Хеширование.ХешСумма);
Совпала сумма — файл тот же. Изменили хотя бы байт — сумма другая.
Исходники в системе контроля версий
Обработку можно выгрузить в XML-файлы и хранить в Git. Это и резервная копия, и история изменений, и доказательство авторства с датами. Выгрузка из командной строки:
"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER /F"C:\Bases\Empty" /DumpExternalDataProcessorOrReportToFiles "C:\src\MyProc" "C:\epf\MyProc.epf"
Обратная сборка — параметр /LoadExternalDataProcessorOrReportFromFiles. Для команды нужна любая файловая база, хоть пустая.
Права доступа и ролевая модель в базе
Внешняя обработка, открытая через Файл → Открыть, работает с правами пользователя и без ограничений безопасного режима. Она может читать файлы на диске, запускать программы, менять любые данные, к которым у пользователя есть доступ. Отсюда главное правило: открывать файлы «с рабочего стола» должны единицы.
Что настроить в ролях
- В Конфигураторе у ролей рядовых пользователей проверьте права на интерактивное открытие внешних обработок и отчётов. Право должно остаться только у администраторов.
- Остальные запускают обработки через справочник дополнительных обработок:
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. - Доступ к конкретной обработке задавайте в её карточке — на закладке с быстрым доступом и разделами указывают, кому и где она видна.
Безопасный режим и защита от опасных действий
При регистрации обработки с флагом БезопасныйРежим = Истина ей недоступны файловая система, COM-объекты, внешние компоненты и интернет. Для отчёта или печатной формы этого обычно достаточно.
В свойствах пользователя есть флаг защиты от опасных действий. Когда он включён, платформа предупреждает при открытии внешней обработки из файла и предлагает её не запускать. Не снимайте его «чтобы не мешало».
Ещё один уровень — профили безопасности в консоли кластера серверов. Профиль указывают в свойствах информационной базы, и он ограничивает, что код может делать на сервере: к каким каталогам обращаться, какие адреса вызывать.
Изменение профиля безопасности базы действует на весь код, включая типовую конфигурацию. Меняйте его вне рабочего времени и сначала на тестовом сервере — иначе часть функций у пользователей может перестать работать.
Юридическая защита: права на код и лицензионный договор
Технические меры поднимают цену копирования. Юридические — дают право требовать компенсацию, если код всё-таки скопировали.
Обработка — это программа для ЭВМ
По части четвёртой Гражданского кодекса РФ программа для ЭВМ охраняется как литературное произведение (статьи 1259 и 1261). Авторское право возникает с момента создания, регистрация не обязательна. Регистрация в Роспатенте — по желанию, она упрощает доказывание.
Кому принадлежат права, зависит от того, как обработка создана:
| Ситуация | У кого исключительное право |
|---|---|
| Сотрудник написал в рамках трудовых обязанностей | У работодателя, если трудовым или иным договором не предусмотрено иное (ст. 1295) |
| Фрилансер по договору подряда | Зависит от договора: передачу права нужно прописать прямо |
| Своя тиражная разработка | У автора или его компании |
Что записать в лицензионный договор
Тиражную обработку не продают, а дают право использования по лицензионному договору (статья 1286 ГК РФ). Пропишите в нём:
- 📌 число баз или рабочих мест, на которые выдана лицензия;
- 📌 запрет декомпиляции, модификации и передачи третьим лицам;
- 📌 срок действия и порядок продления;
- 📌 передаются ли исходные тексты и на каких условиях;
- 📌 что будет при нарушении.
Ответственность за нарушение
За незаконное использование программы правообладатель вправе требовать возмещения убытков или компенсации — по статье 1301 ГК РФ от 10 тыс. до 5 млн рублей по решению суда. Есть и административная ответственность (статья 7.12 КоАП РФ), а при крупном ущербе — уголовная (статья 146 УК РФ).
Храните доказательства авторства: историю коммитов, переписку с заказчиком, ранние версии файлов с датами. В споре это весомее, чем «код же мой».
Частые вопросы
Можно ли защитить внешнюю обработку 1С на сто процентов?
Нужно ли отдавать заказчику исходники обработки?
Защищает ли обработку ключ HASP от 1С?
Почему обработка без безопасного режима опаснее?
Чем пароль на модуль хуже поставки без исходных текстов?
Источники
- Гражданский кодекс РФ, часть четвёртая (статьи 1225, 1259, 1261, 1286, 1295, 1301)
- Кодекс РФ об административных правонарушениях, статья 7.12
- Уголовный кодекс РФ, статья 146