Защита внешней обработки 1С: пароль на код, на запуск и на доступ
Содержание
Чтобы поставить пароль
на обработку 1С, откройте файл .epf в Конфигураторе, откройте модуль объекта или модуль формы и задайте пароль командой из меню «Текст». После сохранения обработка работает как раньше, но её исходный код без пароля не открыть. Если нужно, чтобы обработку не мог даже запустить посторонний, к паролю на модуль добавьте проверку пароля в самой форме.
Типичная ситуация: программист сделал бухгалтерии обработку для массовой перепроводки документов. Через месяц выясняется, что её запускал кладовщик, а код скопировал и «доработал» коллега из соседнего отдела. Ниже разобраны оба уровня защиты: от чтения кода и от запуска, а также то, чем их дополнить.
Зачем защищать обработку паролем
Внешняя обработка — это обычный файл. Его легко переслать по почте, скопировать на флешку и открыть в любой базе, где у пользователя есть право на открытие внешних обработок.
От чего защищает пароль:
- 🔒 Чтение и копирование кода. Ваша разработка не уйдёт к конкурентам и не будет «переиспользована» без спроса.
- ✏️ Правки «на коленке». Никто не поменяет алгоритм так, что потом придётся разбираться, почему суммы не сходятся.
- 🚫 Случайный запуск. Обработки, которые меняют данные (перепроводка, групповое удаление, загрузка остатков), не должен запускать любой сотрудник.
- 🧾 Учёт изменений. Если код закрыт, а исходник хранится у разработчика, понятно, какая версия обработки в работе.
Пароль в 1С бывает двух видов, и их часто путают. Один закрывает исходный текст, другой — открытие формы. Первый настраивается в Конфигураторе, второй пишется кодом. Они решают разные задачи и хорошо работают вместе.
Какие есть способы поставить пароль на обработку 1С
Сначала сравнение, затем подробный разбор каждого способа.
| Способ | От чего защищает | Где настраивается | Ограничения |
|---|---|---|---|
| Пароль на модуль | Просмотр и правка кода | Конфигуратор, меню «Текст» | Обработку по-прежнему можно запустить |
| Проверка пароля в форме | Запуск посторонним | Код модуля формы | Без пароля на модуль проверку легко убрать |
| Проверка роли пользователя | Запуск без нужных прав | Код модуля формы | Пользователь с полными правами откроет |
| Права и «Дополнительные обработки» | Открытие произвольных файлов | Пользователи и роли базы | Защищает базу, а не сам файл |
| Поставка без исходного текста | Чтение кода совсем | Поставка конфигурации или расширения | Только для кода внутри конфигурации |
Пароль на модуль внешней обработки: пошаговая инструкция
Этот способ закрывает код. Он встроен в платформу и не требует программирования.
Шаг 1. Сохраните копию исходника
Пароль на модуль не восстанавливается. Если вы его забудете, редактировать код будет нечем. Поэтому до установки пароля сохраните открытую версию файла отдельно, например Перепроводка_исходник.epf, и держите её у разработчика, а не в общей папке.
Шаг 2. Откройте обработку в Конфигураторе
- Запустите любую базу в режиме Конфигуратор. Открывать саму конфигурацию для этого не нужно.
- Выберите
Файл → Открытьи укажите файл.epf. - Откроется дерево обработки: реквизиты, табличные части, формы, макеты.
Шаг 3. Откройте модуль и задайте пароль
- Откройте модуль объекта: правой кнопкой по корню обработки → «Открыть модуль объекта».
- Когда модуль открыт и курсор стоит в тексте, в главном меню появится меню «Текст». В нём есть команда установки пароля.
- Введите пароль и подтверждение. Сохраните файл:
Файл → СохранитьилиCtrl+S.
Шаг 4. Повторите для модулей форм
Пароль ставится на каждый модуль отдельно. Модуль объекта и модули форм — разные модули.
- Откройте каждую форму обработки и перейдите на вкладку «Модуль».
- Задайте пароль так же, через меню «Текст».
- Можно использовать один пароль на все модули, но помнить придётся, что он стоит на каждом.
Самая частая ошибка — закрыть только модуль объекта. Основная логика в управляемых формах обычно живёт в модуле формы, и он остаётся открытым.
Шаг 5. Проверьте результат
- Закройте обработку и откройте файл в Конфигураторе заново.
- Попробуйте открыть модуль — платформа запросит пароль.
- Запустите обработку в режиме 1С:Предприятие через
Файл → Открыть. Она должна работать как раньше.
Чтобы снять пароль, откройте модуль с паролем и в том же меню «Текст» задайте пустой пароль.
Программная защита: проверка пароля при открытии обработки
Пароль на модуль не мешает запустить обработку. Если нужно ограничить запуск, проверку пишут во встроенном языке — в модуле формы.
Вариант 1. Пароль в поле формы
Логика простая: при открытии видно только поле пароля, рабочая часть формы скрыта. Верный пароль — показываем рабочие элементы.
Подготовка формы:
- Добавьте реквизит формы
ВведенныйПароль(тип «Строка»). - Выведите его на форму и в свойствах поля включите «Режим пароля» — символы будут скрыты точками.
- Все рабочие элементы поместите в группу
ГруппаРаботаи снимите у неё флажок «Видимость». - Добавьте команду
Войтии кнопку для неё.
Пароль в коде не храните открытым текстом. Храните его хеш:
&НаКлиенте
Процедура Войти(Команда)
Если ПарольВерен(ВведенныйПароль) Тогда
Элементы.ГруппаРабота.Видимость = Истина;
Элементы.ВведенныйПароль.Видимость = Ложь;
Элементы.Войти.Видимость = Ложь;
Иначе
ВведенныйПароль = "";
Сообщить("Неверный пароль");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПарольВерен(Знач Пароль)
Возврат ХешПароля(Пароль) = "ВСТАВЬТЕ_СЮДА_ХЕШ";
КонецФункции
&НаСервереБезКонтекста
Функция ХешПароля(Знач Пароль)
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.Добавить(Пароль);
Возврат ПолучитьHexСтрокуИзДвоичныхДанных(Хеширование.ХешСумма);
КонецФункции
Как получить хеш для вставки в код:
- Временно добавьте в обработку кнопку, которая вызывает
Сообщить(ХешПароля(ВведенныйПароль)). - Введите пароль, нажмите кнопку, скопируйте строку из окна сообщений.
- Вставьте её вместо
ВСТАВЬТЕ_СЮДА_ХЕШи уберите временную кнопку.
Хеш считается той же функцией, поэтому регистр букв и формат строки совпадут.
Хеш SHA-256 из короткого пароля вроде 1234 перебирается за секунды. Берите пароль от 10 символов, с цифрами и буквами разного регистра.
Ограничение числа попыток
Чтобы пароль не подбирали вручную, добавьте счётчик. Создайте реквизит формы ЧислоПопыток (тип «Число») и в ветке Иначе процедуры Войти увеличивайте его:
ЧислоПопыток = ЧислоПопыток + 1;
Если ЧислоПопыток >= 3 Тогда
Закрыть();
КонецЕсли;
После третьей неудачной попытки форма закроется. Защита простая: обработку можно открыть заново. Но от перебора «на удачу» за рабочим местом коллеги её хватает.
Вариант 2. Проверка роли вместо пароля
Если нужно пускать определённых пользователей, пароль не нужен вовсе. Проверьте роль при создании формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не РольДоступна("ПолныеПрава") Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Имя роли подставьте своё: посмотрите его в Конфигураторе в ветке «Общие → Роли». При Отказ = Истина форма просто не откроется.
Такой вариант удобнее пароля: его не надо никому сообщать и менять при увольнении сотрудника. Минус — обработка привязана к ролям конкретной конфигурации.
Где ставить проверку
- Проверку размещайте на сервере: функция
&НаСервереБезКонтекстаили обработчикПриСозданииНаСервере. - Если в обработке есть экспортные процедуры модуля объекта, которые меняют данные, продублируйте в них проверку роли. Иначе их можно вызвать в обход формы.
- Обязательно закройте паролем модуль формы. Без этого любой откроет обработку в Конфигураторе, удалит три строки проверки и сохранит файл.
Шифрование модулей: насколько надёжен пароль 1С
Пароль на модуль — это шифрование исходного текста внутри файла .epf. Скомпилированный код при этом остаётся рабочим, поэтому платформа выполняет обработку без пароля.
Важно трезво оценивать его стойкость. Механизм паролей модулей давно изучен, и для его снятия существуют сторонние утилиты. Пароль надёжно остановит пользователя и начинающего программиста. Опытного разработчика, который целенаправленно хочет прочитать код, он не остановит.
Что делают, когда нужна защита сильнее:
- 🧩 Обфускация. Код до установки пароля прогоняют через обфускатор: переменные получают бессмысленные имена, логика запутывается. Даже после снятия пароля читать такой код очень тяжело. Обфускаторы для 1С — сторонние программы, перед покупкой проверьте их на копии обработки.
- 📦 Поставка без исходного текста. Для модулей конфигурации платформа позволяет при создании файлов поставки исключить исходный текст. Внешней обработки это не касается: логику для такой поставки переносят в конфигурацию или общий модуль.
- 🔑 Система лицензирования. Для тиражных разработок существует «1С:Система лицензирования и защиты конфигураций». Она привязывает работу к ключу и защищает код. Это платное решение для разработчиков, которые продают свои продукты.
- 🌐 Вынос логики на свой сервер. Ключевой алгоритм работает у вас, а обработка у клиента только отправляет данные и получает результат через HTTP-сервис.
Не используйте пароль на модуль как единственный способ «привязать» обработку к клиенту. Если от этого зависят деньги, нужна лицензионная защита, а не пароль.
Ошибки при установке пароля и как их избежать
Ошибки, которые встречаются на практике и дорого обходятся:
- 🔑 Пароль забыт, исходника нет. Код больше не отредактировать штатно. Остаётся переписать обработку заново. Храните пароли в менеджере паролей, а открытую копию — отдельно.
- 📂 Закрыт не тот файл. Пароль поставили на копию на рабочем столе, а пользователи работают с файлом из сетевой папки или из справочника дополнительных обработок. Проверяйте файл, который реально запускается.
- 🔁 Обновили обработку в базе старой версией. В справочник дополнительных обработок загрузили открытый исходник вместо защищённого. Перед загрузкой откройте модуль в Конфигураторе и убедитесь, что пароль запрашивается.
- 🧱 Пароль в форме, но модуль открыт. Проверку легко вырезать — нужен пароль и на модуль.
- 📝 Пароль открытым текстом в коде. Сравнение
Если Пароль = "Qwerty123"видно любому, кто снял пароль модуля. Храните хеш.
Другие способы ограничить доступ к обработкам
Иногда задача звучит как «поставить пароль», а на деле нужно, чтобы пользователи не запускали что попало. Это решают настройками базы, а не самой обработки.
Запрет интерактивного открытия внешних обработок
Открыть файл .epf через Файл → Открыть может только пользователь, у которого в роли есть право «Интерактивное открытие внешних обработок». В типовых конфигурациях на базе БСП это право выдаётся отдельными ролями и профилями групп доступа, а не всем подряд.
Если право убрать, пользователь не откроет ни вашу обработку, ни любую скачанную из интернета.
Подключение через «Дополнительные отчеты и обработки»
В 1С:Бухгалтерии 3.0 и других конфигурациях на БСП обработку можно загрузить в базу: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
Что это даёт:
- Файл хранится в базе, пользователям не нужен доступ к папке с
.epf. - В карточке обработки указывают, каким пользователям она доступна, и в каком разделе выводится.
- Права на её использование не требуют права открывать произвольные внешние файлы.
Защита от опасных действий
В свойствах пользователя базы есть флажок «Защита от опасных действий». При открытии внешней обработки или подключении расширения платформа предупреждает пользователя, что файл может содержать опасный код. Это не пароль, но хорошо срабатывает против случайного запуска присланных файлов.
Расширение конфигурации
Если обработкой пользуются постоянно, её можно перенести в расширение конфигурации. Тогда доступ к ней управляется ролями, как к любому объекту базы, а файл .epf больше не путешествует по почте.