При публикации расширений в облачном сервисе 1С:Фреш разработчики часто сталкиваются с жесткими требованиями автоматического аудита. Наиболее распространенные ошибки связаны с попытками обращения к файловой системе сервера и внешним интернет-ресурсам. Рассмотрим подробнее, почему возникают эти ошибки и как их правильно исправить, чтобы расширение успешно прошло проверку.
Облачная среда работает в безопасном режиме. Это означает, что любой код, исполняемый на стороне сервера, ограничен в правах. Система безопасности блокирует прямые вызовы функций, которые могут нанести вред серверу или привести к утечке данных. Разберем две основные категории блокировок:
C:\Temp) запрещен. Методы типа НайтиФайлы() или КопироватьФайл() на сервере вызывают немедленную ошибку аудита.Если работа с внешним ресурсом или файлами на сервере действительно необходима, мы должны «объяснить» системе, что это действие легитимно. Для этого используется механизм Библиотеки стандартных подсистем (БСП). Проанализируем процесс регистрации разрешений.
Разрешения не добавляются в произвольное место кода. Они должны быть собраны в массив и переданы системе в специальном обработчике. Обычно это делается в модуле объекта расширения или в общем модуле, который отвечает за интеграцию с БСП. Рассмотрим пример регистрации разрешения на использование интернет-ресурса.
Выясним причину, по которой нам нужно соединение, и подготовим код:
// В соответствующем обработчике (например, ПриОпределенииНастроекБезопасногоРежима)
Протокол = "HTTPS";
Адрес = "api.service.ru";
Порт = 443;
Описание = "Синхронизация данных с личным кабинетом службы доставки";
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Адрес, Порт, Описание);
МассивРазрешений.Добавить(Разрешение);
Важно помнить: при указании адреса нельзя использовать маски (звездочки). Нужно указывать конкретный домен. Если ваше расширение обращается к десяти разным поддоменам, каждый из них должен быть описан отдельно.
Если коду требуется создать файл для временной обработки (например, сформировать XML перед отправкой), нельзя использовать жестко прописанные пути. Разберем правильный алгоритм работы с файлами:
ПолучитьИмяВременногоФайла(). Она возвращает путь в разрешенную временную папку.Посмотрим на пример формирования такого разрешения:
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, "Обработка промежуточных данных импорта");
МассивРазрешений.Добавить(Разрешение);
Здесь параметры Истина, Истина означают разрешение на чтение и запись соответственно.
Многие ошибки аудита можно предотвратить, если изменить архитектуру решения. Проанализируем ситуацию: если пользователю нужно выбрать файл с его компьютера или сохранить отчет на свой диск, серверный код здесь не нужен.
Вместо выполнения операций на сервере, используйте директиву &НаКлиенте. На клиентской стороне (в браузере или тонком клиенте) действуют права текущего пользователя операционной системы, и строгие серверные ограничения 1С:Фреш на них не распространяются.
Рассмотрим пример правильной логики:
ДвоичныеДанные, не обращаясь к дискам.Для минимизации ошибок рекомендуется использовать стандартные методы БСП вместо платформенных вызовов. Например, вместо прямого создания HTTPСоединение, лучше использовать ОбщегоНазначения.HTTPСоединение(). Рассмотрим преимущества этого подхода:
Методы БСП уже оптимизированы для работы в безопасном режиме. Они содержат внутренние проверки, которые «успокаивают» автоматический аудит. Кроме того, такие методы позволяют централизованно управлять настройками прокси-серверов, что критично для облачной инфраструктуры.
Просто написать код недостаточно. После того как вы добавили запросы разрешений в расширение и загрузили его в личный кабинет 1С:Фреш, необходимо выполнить административные действия. Разберем их по шагам:
РаботаВБезопасномРежиме.Иногда даже при наличии разрешений код может давать сбои из-за ограничений прав самого пользователя. Проанализируем ситуацию, когда необходимо временно повысить права кода. Для этого используется УстановитьПривилегированныйРежим(Истина).
Внимание: Злоупотребление привилегированным режимом — это прямой путь к отклонению расширения аудиторами. Используйте его только для тех участков кода, которые действительно требуют доступа к защищенным данным, и обязательно возвращайте режим в Ложь сразу после выполнения операции.
Подводя итог, можно сказать, что «победить» аудит Фреша можно только через дисциплинированное использование механизмов БСП и отказ от прямых манипуляций с серверными ресурсами. Старайтесь максимально использовать ВременноеХранилище и объекты ДвоичныеДанные для обмена информацией между клиентом и сервером.