База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как защитить ключевую логику в 1С через внешние обработки? › Ответ в теме: Как защитить ключевую логику в 1С через внешние обработки?
Разберу подробно, как организовать защиту ключевой логики через внешние обработки с закрытыми модулями и хранением их в базе в виде двоичных данных.
—
### 1. Вынесение ключевой логики в отдельную внешнюю обработку с закрытым модулем
— Создаёте внешнюю обработку (файл *.epf), в которой пишете все важные алгоритмы в модуле объекта (не в модуле формы!).
— В свойствах модуля объекта ставите пароль (через меню Конфигуратор → Свойства модуля → Пароль). Это закрывает исходный код от просмотра.
— В модуле объекта делаете экспортные процедуры и функции, которые будут вызываться из основной обработки. Например:
|
1 2 3 4 |
Функция РассчитатьСекретноеЗначение(Параметр) Экспорт // Ваша логика Возврат Параметр * 42; // пример КонецФункции |
—
### 2. Вызов внешней обработки из основной обработки
— В основной обработке (или конфигурации) вы программно загружаете внешнюю обработку из файла или из двоичных данных (макета).
— Для этого используйте методы из менеджера ВнешниеОбработки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Путь к файлу внешней обработки (если храните как файл) ПутьКФайлу = "C:ПутьКВнешняяОбработка.epf"; // Или если храните в макете, то сначала получаете двоичные данные макета ДвоичныеДанные = ЭтотОбъект.Макеты.Получить("ИмяМакета"); // Записываете двоичные данные во временный файл ВременныйФайл = ПолучитьИмяВременногоФайла("epf"); ДвоичныеДанные.Записать(ВременныйФайл); // Получаете форму внешней обработки ФормаВнешнейОбработки = ВнешниеОбработки.ПолучитьФорму(ВременныйФайл); // Вызываете экспортную функцию Результат = ФормаВнешнейОбработки.РассчитатьСекретноеЗначение(123); // Закрываете форму, если нужно ФормаВнешнейОбработки.Закрыть(); |
—
### 3. Хранение внешней обработки в базе в виде двоичных данных (макетов)
— В конфигураторе в вашей основной конфигурации создаёте макет (например, «ВнешняяОбработка.epf»).
— В макет загружаете файл внешней обработки (через свойства макета → загрузить из файла).
— Таким образом, файл внешней обработки хранится внутри базы в виде двоичных данных, и его нельзя просто так взять с диска.
— При необходимости запускаете внешнюю обработку, выгружая макет во временный файл (как в примере выше).
—
### 4. Почему это защищает?
— Код внешней обработки закрыт паролем, его нельзя посмотреть в конфигураторе.
— Внешняя обработка не лежит в открытом виде на диске, а хранится в базе в виде двоичных данных.
— Вызов происходит программно, пользователь не может просто открыть файл и посмотреть код.
— Если дополнительно скомпилировать модуль объекта внешней обработки (через создание файла поставки без исходников), то декомпиляция становится невозможной.
—
### 5. Дополнительные советы
— Для повышения защиты создайте пустую конфигурацию, встроите туда внешнюю обработку, снимите флаг «Включать исходный текст модулей» и создайте файл поставки. После этого модуль будет скомпилированным и закрытым.
— В основной конфигурации используйте вызов из двоичных данных, чтобы не хранить файл на диске.
— Если нужно обновлять внешнюю обработку — обновляйте макет с новым файлом.
—
### Пример кода для вызова из макета
|
1 2 3 4 5 6 7 8 9 10 11 |
Функция ВызватьВнешнююОбработку() ДвоичныеДанные = ЭтотОбъект.Макеты.Получить("ВнешняяОбработка.epf"); ВременныйФайл = ПолучитьИмяВременногоФайла("epf"); ДвоичныеДанные.Записать(ВременныйФайл); Форма = ВнешниеОбработки.ПолучитьФорму(ВременныйФайл); Результат = Форма.РассчитатьСекретноеЗначение(100); Форма.Закрыть(); Возврат Результат; КонецФункции |
—
Если нужна помощь с конкретным кодом или настройкой — могу помочь.