Защита конфигурации 1С от копирования и чужих правок

· 10 мин

Содержание

Защитить код 1С полностью нельзя: платформа исполняет модули на машине клиента, и всё, что туда попало, теоретически можно прочитать. Реальная защита конфигурации — это сочетание мер: поставка без исходных текстов, вынос ключевой логики во внешнюю компоненту или на свой сервер, лицензирование через СЛК, закрытый Конфигуратор и договор, который фиксирует ваши права.

Выбор зависит от того, от кого вы защищаетесь. От любопытного программиста клиента хватит поставки без исходников. От конкурента, который хочет продавать вашу разработку, нужен вынос логики и юридическая база. От сотрудника, который «подправит» базу без спроса, — права доступа .

Встроенные средства платформы: что даёт Конфигуратор

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

Поставка конфигурации без исходных текстов

Главный штатный приём. Разработчик готовит файл поставки .cf, в котором выбранные модули идут не текстом, а в скомпилированном виде.

  1. Откройте конфигурацию в Конфигураторе.
  2. Перейдите в Конфигурация → Поставка конфигурации → Настройка поставки.
  3. Для нужных объектов и модулей укажите поставку без исходных текстов. Помечайте не всё подряд, а модули с ценной логикой: расчёты, алгоритмы обмена, проверки лицензии.
  4. Создайте файл поставки: Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления.
  5. Загрузите полученный .cf в чистую тестовую базу и проверьте, что всё работает и модули действительно не открываются.

Модуль без исходного текста нельзя отладить у клиента. Ошибка в нём покажется пользователю без строки кода, и разбираться придётся по вашей копии исходников. Храните их в хранилище конфигурации или Git.

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

Слабое место: скомпилированный модуль — это байт-код, а не машинный код. Для него существуют сторонние декомпиляторы. Поэтому поставка без исходников — барьер для большинства, но не замок.

Правила поддержки

В той же настройке поставки разработчик задаёт правила поддержки для объектов: можно ли клиенту менять их. Это защищает от случайных правок и упрощает обновление, но не скрывает код. Клиент со своей стороны может снять конфигурацию с поддержки и править всё, что открыто текстом.

Закрытый Конфигуратор

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

  • 👤 заведите пользователей в Администрирование → Пользователи (в Конфигураторе) и задайте пароль администратору;
  • 🔑 право «Администрирование» дайте только тем, кто реально сопровождает базу: без него Конфигуратор не запустить;
  • 🗄 подключите хранилище конфигурации и раздайте права на захват объектов поимённо.

Что проверить в поставке перед отправкой клиенту

Перед тем как отдать .cf, пройдите короткую проверку на тестовой базе:

Проверка файла поставки
Выполнено: 0 / 5

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

Обфускация, шифрование и вынос логики из модулей

Когда штатной поставки мало, применяют три приёма. Они различаются силой и ценой сопровождения.

МетодЧто делаетСилаЦена
ОбфускацияПереименовывает переменные и процедуры, вставляет мусорный код, путает ветвленияСредняяКод почти невозможно поддерживать, обфусцированную копию нельзя дорабатывать
Шифрование строк и кодаКлючевые фрагменты хранятся зашифрованными и выполняются через Выполнить() после расшифровкиНизкая–средняяКлюч всё равно лежит в конфигурации; Выполнить() не работает в безопасном режиме и на части клиентов
Внешняя компонентаАлгоритм пишется на C++ по технологии Native API и подключается к 1С как библиотекаВысокаяНужен отдельный разработчик, сборки под каждую ОС и разрядность
Логика на своём сервере1С отправляет данные в ваш HTTP-сервис и получает результатСамая высокаяНужен постоянно доступный сервер, клиент зависит от связи

Как применять обфускацию

Обфускатор — сторонняя утилита, в платформе такой функции нет. Порядок работы:

  1. Выгрузите модули из исходной конфигурации.
  2. Прогоните через обфускатор только модули, которые пойдут клиенту без исходников.
  3. Соберите отдельную «боевую» конфигурацию и поставку из неё.
  4. Прогоните тесты на боевой сборке: обфускатор ломает код, где имена процедур вызываются строкой, например через Выполнить() или ОписаниеОповещения.

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

Вынос во внешнюю компоненту или веб-сервис

Это единственный способ, который действительно прячет алгоритм. В конфигурации остаётся только вызов, а сама формула расчёта или правила проверки живут в DLL или на вашем сервере.

Практическое правило: выносите не всё, а «сердце» разработки. Например, формулу ценообразования, алгоритм распределения или проверку лицензионного ключа. Интерфейсные формы и типовая обвязка защиты не требуют.

Защита тиражного решения от копирования и запуска без лицензии

Код можно спрятать, но клиент всё равно способен скопировать базу и отдать её соседу. Против этого нужен механизм лицензирования.

СЛК — система лицензирования и защиты конфигураций

Это продукт фирмы 1С для разработчиков тиражных решений. Схема работы:

  • 🔐 разработчик подключает к конфигурации компоненту защиты и помечает защищаемые модули;
  • 🖥 у клиента ставится сервер СЛК, на котором хранятся лицензии: программные или на аппаратном ключе;
  • ⛔ без активной лицензии защищённые модули не выполняются, даже если база скопирована целиком.

СЛК решает сразу две задачи: защищает код модулей и ограничивает число рабочих мест. Цена — отдельная лицензия разработчика и дополнительная служба у каждого клиента.

Самодельная привязка: почему она слабая

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

Не делайте проверку, которая при сбое удаляет данные или блокирует базу без возможности восстановления. Сбой проверки по любой причине, например после замены сервера, обернётся претензией клиента, а не защитой.

Права доступа и роли: защита от своих

Многие задачи «защиты кода» на деле — задачи прав. Бухгалтер не должен открывать Конфигуратор, а менеджер — запускать произвольные обработки, которые выгрузят базу.

Что проверить в ролях

  • 🛠 право «Администрирование» — только у администраторов: оно открывает Конфигуратор и управление пользователями;
  • 📂 права «Интерактивное открытие внешних обработок» и «Интерактивное открытие внешних отчётов» — только у тех, кому это действительно нужно. Через внешнюю обработку можно прочитать любые данные, к которым у пользователя есть доступ;
  • 🔄 право «Обновление конфигурации базы данных» — только у ответственного за обновления;
  • 🔗 «Внешнее соединение» и «Automation» — только у служебных пользователей интеграций.

Ограничения на уровне записей и безопасный режим

Ограничение доступа на уровне записей (RLS) скрывает часть данных: например, документы чужих организаций. Это защищает данные, а не код, но часто именно это и нужно заказчику.

Для внешних обработок и расширений в клиент-серверном варианте настраивают профили безопасности кластера. Они запрещают коду доступ к файловой системе, COM-объектам и внешним ресурсам, если это явно не разрешено.

Где хранится конфигурация физически

  • 📁 Файловая база. Конфигурация лежит внутри файла 1Cv8.1CD. Кто может скопировать файл, тот может извлечь конфигурацию сторонними утилитами, минуя пароли пользователей. Ограничьте доступ к папке базы правами Windows.
  • 🗃 Клиент-серверная база . Конфигурация хранится в таблицах СУБД. Доступ к ним есть у администратора сервера СУБД, поэтому круг таких людей тоже должен быть узким.

Расширения конфигурации: изоляция доработок

Расширения появились в платформе 8.3.6 и стали основным способом дорабатывать типовые конфигурации. Прямой защиты кода они не дают: модули расширения открыты. Зато решают другую часть задачи.

  • ✅ типовая конфигурация остаётся на поддержке, её не снимают с поддержки ради доработки;
  • ✅ ваши изменения лежат в отдельном файле .cfe, их видно целиком и легко передать или откатить;
  • ✅ у расширения есть свойства «Безопасный режим» и «Защита от опасных действий»: расширение из стороннего источника можно ограничить;
  • ✅ обновление типовой конфигурации не затирает доработку.

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

💡 Для тиражного решения удобная схема такая: интерфейс и обвязка — в расширении, ценный алгоритм — во внешней компоненте или на вашем сервере. Тогда клиент свободно обновляет типовую, а «сердце» разработки у него не оказывается.

От кого нужно защитить код?

Юридическая защита: авторское право и договор

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

Кому принадлежат права на код

  • 📜 Программа для ЭВМ охраняется как литературное произведение (ст. 1259 и 1261 ГК РФ). Регистрация в Роспатенте не обязательна, но упрощает доказывание.
  • 👔 Код, написанный штатным программистом в рамках трудовых обязанностей, — служебное произведение: исключительное право у работодателя, если договором не предусмотрено иное (ст. 1295 ГК РФ).
  • 🤝 Код, написанный по договору заказа, по умолчанию принадлежит заказчику (ст. 1296 ГК РФ). Если вы фрилансер или франчайзи и хотите тиражировать разработку, оставьте права за собой прямо в договоре, а клиенту передайте лицензию.

Что писать в лицензионном договоре

  1. Число рабочих мест или баз, на которые даётся право использования.
  2. Запрет передавать конфигурацию третьим лицам и снимать защиту.
  3. Порядок обновлений и поддержки.
  4. Ответственность за нарушение.

Закон разрешает пользователю без согласия правообладателя декомпилировать программу только в узких случаях, например для взаимодействия с другими программами (ст. 1280 ГК РФ). Перепродажа и распространение к ним не относятся.

Ответственность нарушителя

  • 💰 гражданская: компенсация от 10 тыс. до 5 млн руб. или в двукратном размере стоимости права использования (ст. 1301 ГК РФ);
  • ⚖️ административная: ст. 7.12 КоАП РФ;
  • 🚨 уголовная: ст. 146 УК РФ при крупном размере ущерба.

Для доказывания сохраняйте историю хранилища или Git с датами, договоры с разработчиками и акты передачи. Это главные доказательства авторства в споре.

Типовая конфигурация фирмы 1С — чужая интеллектуальная собственность. Закрывать или перепродавать её код как свой нельзя, даже с доработками. Защищать можно только собственный код: отдельную конфигурацию, расширение, обработки и компоненты.

Ошибки, из-за которых защита не работает

  • ❌ Закрыли модули, но ключ лицензии проверяется в открытом. Достаточно закомментировать одну строку в открытом модуле, и вся защита обходится. Код проверки должен быть там же, где защищённая логика.
  • ❌ Поставили без исходников, а исходники потеряли. Исправить ошибку у клиента нечем. Резервная копия исходной конфигурации обязательна.
  • ❌ Пароль администратора один на всех. Он быстро уходит к случайным людям. Заведите каждому сопровождающему свою учётную запись.
  • ❌ Защитили код, оставили открытой папку файловой базы. Копия 1Cv8.1CD даёт доступ и к данным, и к конфигурации.
  • ❌ Нет договора. Без письменной фиксации прав заказчик по умолчанию получает исключительное право на заказанный код, и запретить ему что-либо сложно.
Можно ли поставить пароль на конфигурацию 1С?
Отдельного пароля на конфигурацию нет. Защищают доступ к Конфигуратору через список пользователей с паролями и право «Администрирование», а сам код — поставкой без исходных текстов.
Можно ли открыть модуль, поставленный без исходного текста?
Штатно в Конфигураторе — нет. Сторонние декомпиляторы байт-кода существуют, поэтому для действительно ценного алгоритма используйте внешнюю компоненту или свой сервер.
Влияет ли поставка без исходников на скорость работы?
Заметного влияния нет: платформа и так исполняет скомпилированный код. Проблемы возникают с отладкой, а не со скоростью.
Можно ли обновлять типовую конфигурацию, если доработки закрыты?
Да, если доработки вынесены в расширение. Если закрытые модули встроены прямо в типовую, обновление усложняется: сравнение и объединение по ним сделать нельзя.
Защищает ли СЛК файловую базу?
Да, СЛК работает и с файловыми, и с клиент-серверными базами. Для её работы у клиента должен быть доступен сервер лицензий.

Источники

  • Гражданский кодекс РФ, часть 4 (ст. 1259, 1261, 1280, 1295, 1296, 1301)
  • Уголовный кодекс РФ, ст. 146
  • КоАП РФ, ст. 7.12