Как перевести внешнюю обработку в безопасный режим для прохождения аудита в 1С:Фреш?

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

Перевод внешней обработки в безопасный режим — это обязательное требование для публикации решения в сервисе 1С:Фреш. Однако простая установка флага БезопасныйРежим = Истина часто приводит к тому, что код перестает работать, выдавая ошибки доступа. Разберем подробно, почему это происходит и как правильно настроить разрешения, чтобы ваша обработка успешно прошла технический аудит.

Почему возникает ошибка при включении безопасного режима?

Когда внешняя обработка запускается в безопасном режиме, платформа 1С накладывает жесткие ограничения на выполнение определенных операций. Проанализируем типичную ситуацию: ваша обработка формирует XML-файл и использует стандартные механизмы конфигурации для проверки данных контрагентов или загрузки классификаторов. В этот момент выполнение кода переходит в общие модули (например, ИнтернетПоддержкаПользователей или РаботаСКлассификаторами), которые пытаются установить HTTPСоединение.

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

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

Настройка функции СведенияОВнешнейОбработке

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

Ранее программисты часто устанавливали параметр регистрации ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);. Это решало проблему локально, но такой вариант недопустим для облачных сервисов. Нам нужно оставить режим безопасным, но добавить в него исключения (разрешения).

Шаг 1: Инициализация коллекции разрешений

В функции СведенияОВнешнейОбработке мы должны создать массив разрешений и наполнить его конкретными требованиями. Проанализируем пример кода:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидДополнительнойОбработки();
    ПараметрыРегистрации.Наименование = "Выгрузка электронных документов (Фреш)";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    
    // Создаем массив для хранения разрешений
    Разрешения = Новый Массив;
    
    // Здесь мы будем добавлять разрешения, которые разберем ниже
    // ...
    
    ПараметрыРегистрации.Разрешения = Разрешения;
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Шаг 2: Добавление разрешения на использование интернет-ресурсов

Если ваша обработка обращается к внешним сервисам (например, для проверки ИНН через сервис 1С или работы с ЭДО), необходимо запросить доступ к конкретным протоколам и адресам. Выясним причину ошибки из стека вызовов автора: программа ругается на создание HTTPСоединение в модуле ИнтернетПоддержкаПользователей. Чтобы исправить это, добавим разрешение:


// Разрешение на использование интернет-ресурса по протоколу HTTPS
// Вместо "*" лучше указывать конкретный URL-адрес сервера
АдресРесурса = "https://api.orgname.ru"; 
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS", АдресРесурса));

Важный момент: Для 1С:Фреш крайне не рекомендуется запрашивать доступ ко всем ресурсам (использовать маски или пустые адреса). Аудиторы потребуют перечислить конкретные домены, с которыми взаимодействует код.

Шаг 3: Разрешение на работу с временными файлами

Поскольку суть обработки — формирование и выгрузка XML, нам потребуется работать с файловой системой. В безопасном режиме нельзя писать файлы в произвольные папки типа C:\Temp. Мы должны использовать временное хранилище или временный каталог сеанса.


// Разрешение на использование каталога временных файлов
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов());

// Если требуется работа с конкретным каталогом файловой системы (редко для Фреш)
// Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы("C:\ExportData", Истина, Истина));

Помните, что при выгрузке файлов во Фреше лучше всего формировать данные в памяти или во временном каталоге, а затем передавать их пользователю через ПолучитьФайл() или помещать в ВременноеХранилище.

Шаг 4: Разрешение на использование привилегированного режима

Иногда типовые модули конфигурации (как в случае с ФорматыЭДО_ФНС) требуют кратковременного перехода в привилегированный режим для чтения защищенных данных или выполнения операций, недоступных обычному пользователю. Если ваша обработка вызывает такие методы, добавьте следующее разрешение:


// Разрешение на использование привилегированного режима
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима());

Внимание: Использование этого разрешения — «красный флаг» для аудиторов Фреша. Если вы добавляете его, будьте готовы обосновать в комментариях к коду, почему нельзя обойтись без него. Проанализируем, можно ли переписать код так, чтобы использовать только стандартные права пользователя.

Критически важные требования аудита 1С:Фреш

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

  1. Запрет на использование Выполнить() и Вычислить(): Эти функции позволяют исполнять произвольный код в обход всех проверок. В 99% случаев их использование приводит к мгновенному отказу в публикации.
  2. Оптимизация запросов: Запросы в циклах — верный способ не пройти аудит. Все данные должны выбираться пакетно.
  3. Отсутствие COM-объектов: Серверы Фреша работают в среде, где Новый COMОбъект просто не создастся (например, Linux-серверы). Используйте кроссплатформенные аналоги (Native API или чтение файлов через ТекстовыйДокумент / ЧтениеXML).
  4. Локализация: Все строковые константы, которые видит пользователь, должны быть оформлены корректно, без использования жестко заданных путей или специфических настроек конкретного ПК.

Как проверить работу перед отправкой на аудит?

Разберем, как убедиться, что всё сделано правильно, не дожидаясь ответа от службы поддержки Фреша. Выполните следующие действия:

1. Включите в своей локальной базе (которая должна быть максимально близка по версии к базе Фреш) профили безопасности. Это делается в параметрах запуска или настройках сервера.

2. Загрузите обработку через справочник «Дополнительные отчеты и обработки».

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

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

Использование механизмов БСП (Библиотеки Стандартных Подсистем) для управления разрешениями позволяет гибко настраивать доступ, сохраняя безопасность системы. Это требует больше времени на разработку, чем простая выгрузка «как есть», но это единственный путь для легальной и стабильной работы ваших расширений в облаке 1С.

← На главную