К статье
Практический материал

Разработка и Конфигурация · 14 мин

Безопасный режим во внешних обработках 1С: что это и как устроен

Что такое безопасный режим во внешних обработках 1С, какие ограничения он накладывает, как его включить, отключить и проверить. Ошибки, риски и практические приёмы.

Безопасный режим в 1С — это специальный режим исполнения программного кода, при котором платформа блокирует потенциально опасные операции: доступ к файловой системе, запуск внешних приложений, загрузку внешних компонент, работу с COM-объектами и ряд других действий. Когда внешняя обработка или отчёт открывается из интерфейса «Дополнительные отчеты и обработки» (механизм БСП), её код по умолчанию выполняется именно в безопасном режиме.

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

Для разработчика и администратора важно понимать две вещи: какие именно операции блокируются и как законно управлять режимом — когда его стоит оставить, а когда допустимо отключить. Ошибки в этой области приводят либо к неработающим обработкам (код «молча» падает с ошибкой при попытке обратиться к файлу), либо к реальным уязвимостям, если безопасный режим отключён без необходимости.

Что такое безопасный режим и зачем он нужен

Безопасный режим (SafeMode) — это программный «песочный» контур внутри платформы 1С:Предприятие. Когда код исполняется в этом режиме, платформа перехватывает обращения к системным ресурсам и запрещает те из них, которые могут нанести вред серверу, клиентскому компьютеру или данным вне информационной базы.

Механизм актуален в первую очередь для трёх сценариев: выполнение внешних обработок и отчётов, подключённых через подсистему «Дополнительные отчеты и обработки» библиотеки стандартных подсистем (БСП); выполнение кода из строки через метод Выполнить() и Вычислить() в контекстах, где безопасный режим включён явно; работа расширений конфигурации с отключённой защитой от опасных действий.

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

Какие операции блокируются в безопасном режиме

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

  • операции с файловой системой: чтение, запись, удаление файлов и каталогов (объекты ТекстовыйДокумент с записью на диск, Файл, ДиалогВыбораФайла в серверном контексте и т.п.);
  • запуск внешних приложений и команд операционной системы (ЗапуститьПриложение, КомандаСистемы);
  • загрузка внешних компонент (ПодключитьВнешнююКомпоненту);
  • создание COM-объектов и OLE-автоматизации (Новый COMОбъект);
  • доступ в Интернет: HTTP-запросы, почтовые протоколы, FTP (HTTPСоединение, ИнтернетПочта);
  • использование привилегированного режима (УстановитьПривилегированныйРежим игнорируется или вызывает ошибку в зависимости от контекста);
  • операции с буфером обмена, журналом регистрации в части изменения, доступ к временным каталогам ОС.

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

При этом внутри информационной базы обработка может работать практически без ограничений: читать и изменять данные объектов, выполнять запросы, формировать табличные документы, вызывать общие модули конфигурации (если у пользователя есть права). Безопасный режим ограничивает «выход наружу», а не работу с данными.

Ошибка «Операция не допустима в безопасном режиме»Обработка обращается к запрещённому ресурсу

Найти в тексте ошибки модуль и строку, определить запрещённый вызов

Обработка падает при выборе файлаСерверный код пытается работать с диском

Перенести файловые операции на клиента через НачатьПомещениеФайла

Метод Выполнить() вызывает исключениеДинамический код запрещён в SafeMode

Заменить динамический вызов на явный код или отключить безопасный режим для доверенной обработки

Когда обработка выполняется в безопасном режиме

Наиболее распространённый случай — подключение внешней обработки через справочник «Дополнительные отчеты и обработки» (Администрирование → Печатные формы, отчеты и обработки). БСП при выполнении таких объектов вызывает их в безопасном режиме, если в карточке обработки не снят соответствующий флаг и если в настройках подсистемы не разрешён небезопасный режим.

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

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

Роль профилей безопасности в кластере

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

Как проверить и как включить или отключить режим

Из кода текущее состояние проверяется функцией БезопасныйРежим() — она возвращает Истина, если код выполняется в безопасном режиме. Это удобно для диагностики: добавьте временный вывод значения в начало обработки, чтобы понять, в каком режиме она реально исполняется.

Программно включить режим можно методом УстановитьБезопасныйРежим(Истина) — например, перед вызовом Выполнить() для непроверенного кода. Обратное действие, УстановитьБезопасныйРежим(Ложь), изнутри безопасного режима невозможно: это было бы обходом защиты, поэтому платформа такой вызов запрещает.

Для внешних обработок, подключаемых через БСП, режим настраивается в интерфейсе. В карточке дополнительного отчёта или обработки есть команда «Безопасный режим» (или аналогичный флаг, в зависимости от версии БСП). Кроме того, в настройках подсистемы «Дополнительные отчеты и обработки» есть функциональная опция, запрещающая отключение безопасного режима в принципе — если она включена, снять флаг не получится.

Порядок действий при отключении безопасного режима для обработки
  1. 1
    Убедитесь, что код обработки проверен: источник доверенный, текст модуля просмотрен, подозрительных вызовов нет
  2. 2
    Откройте Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки
  3. 3
    Откройте карточку нужной обработки и снимите флаг «Безопасный режим» (команда может называться «Отключить безопасный режим»)
  4. 4
    Сохраните карточку и запустите обработку от имени пользователя с рабочими правами
  5. 5
    Проверьте результат и журнал регистрации на предмет ошибок доступа

Как писать обработки, совместимые с безопасным режимом

Правильный подход — проектировать обработку так, чтобы она работала в SafeMode без исключений. Основной приём: все операции с файлами выполнять на клиенте через асинхронные методы (НачатьПомещениеФайла, НачатьПолучениеФайлов, диалоги выбора файлов), а на сервер передавать только содержимое — например, двоичные данные или текст. Файловые операции в клиентском контексте, инициированные пользователем через диалог, не блокируются так жёстко, как серверный доступ к диску.

Если обработке нужен обмен с внешним сервисом, рассмотрите перенос этой логики в конфигурацию — в общий модуль, который выполняется вне безопасного режима, а обработка пусть вызывает его методы. Дополнительные обработки БСП могут обращаться к серверным процедурам конфигурации, и ограничения SafeMode там уже не действуют, если сам модуль не вызывается в безопасном контексте.

Избегайте динамического выполнения кода через Выполнить(). Практически любую задачу, которую решают динамическим кодом (произвольные условия отбора, пользовательские формулы), можно реализовать через СКД, запросы с параметрами или заранее описанные алгоритмы. Это не только совместимо с SafeMode, но и безопаснее по сути.

bsl
Если БезопасныйРежим() Тогда
    Сообщить("Обработка выполняется в безопасном режиме");
КонецЕсли;
Частая ситуация: обработка, купленная или скачанная давно, после обновления конфигурации перестаёт работать с ошибкой безопасного режима. Причина обычно не в обработке, а в том, что при обновлении БСП карточка обработки пересоздалась с включённым SafeMode. Проверьте флаг в карточке до переписывания кода.
ПЗ
Практическое замечание

Риски отключения безопасного режима

Отключение SafeMode даёт коду обработки полный доступ к серверу 1С: файловой системе, сети, командной строке. Если в обработке есть вредоносный или просто ошибочный код, последствия могут быть серьёзными: утечка данных, шифрование файлов сервера, удаление каталогов, рассылка информации наружу. На клиент-серверном варианте код выполняется от имени учётной записи службы сервера 1С, у которой часто широкие права.

Поэтому действует простое правило: безопасный режим отключается только для обработок, чей код вы лично просмотрели или которые получены из полностью доверенного источника, и только тогда, когда без запрещённых операций задачу решить нельзя. Если обработка «из интернета» требует отключить SafeMode, а причин в её описании не указано — это тревожный признак.

Типичные ошибки и как их избежать

Типичные ошибки
01
Отключение безопасного режима глобально в настройках подсистемы «ради удобства» — открывает доступ всем дополнительным обработкам базы, включая те, что добавят позже
02
Работа с файлами в серверном коде вместо клиентских асинхронных методов — обработка падает в SafeMode, и её начинают «чинить» отключением защиты вместо исправления архитектуры
03
Использование Выполнить() для пользовательских алгоритмов — несовместимо с SafeMode и создаёт канал выполнения произвольного кода
04
Игнорирование журнала регистрации: ошибки «операция не допустима в безопасном режиме» фиксируются там, и по ним быстро находится проблемная строка
05
Путаница между безопасным режимом и привилегированным: это независимые механизмы, и установка привилегированного режима не снимает ограничений SafeMode

Отдельная ошибка администраторов — считать, что безопасный режим защищает данные самой базы. Это не так: обработка в SafeMode может изменять документы и справочники в рамках прав пользователя. Защиту данных обеспечивают роли и права доступа, а безопасный режим охраняет только ресурсы за пределами информационной базы.

Контрольные точки

Как проверить результат

Запуск обработки из списка дополнительных отчетов и обработок
Норма

Обработка открывается и выполняет свою функцию без ошибок

Тревожный признак

Ошибка «Операция не допустима в безопасном режиме» или «Метод не обнаружен»

Журнал регистрации после запуска
Норма

Нет записей об ошибках доступа и безопасного режима

Тревожный признак

Повторяющиеся ошибки с указанием модуля внешней обработки

Настройка в карточке обработки
Норма

Состояние флага безопасного режима соответствует решению, принятому осознанно

Тревожный признак

Флаг снят, но никто не помнит, зачем и кем это сделано

Часто задаваемые вопросы

Может ли обработка в безопасном режиме изменить данные в базе?

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

Почему обработка работает при открытии через «Файл → Открыть», но падает из «Дополнительных обработок»?

При прямом открытии файла код выполняется без безопасного режима, а подсистема БСП запускает дополнительные обработки в SafeMode по умолчанию. Значит, в коде есть запрещённая операция — файловый доступ, COM, HTTP или Выполнить(). Нужно либо адаптировать код, либо осознанно снять флаг безопасного режима в карточке обработки.

Как узнать, какая именно операция запрещена?

Текст ошибки содержит имя модуля и номер строки. Откройте модуль обработки в конфигураторе, перейдите к указанной строке и определите вызов. Дополнительно полезно посмотреть журнал регистрации — туда попадает расширенное описание ошибки с контекстом.

Можно ли отключить безопасный режим из кода самой обработки?

Нет. Вызов УстановитьБезопасныйРежим(Ложь) изнутри безопасного режима запрещён платформой — иначе защита не имела бы смысла. Режим отключается только снаружи: настройкой карточки обработки в БСП или параметрами вызывающего кода конфигурации.

Чем безопасный режим отличается от профилей безопасности кластера?

Безопасный режим — программный переключатель «всё запрещено / всё разрешено» на уровне сеанса исполнения кода. Профиль безопасности — настройка кластера серверов, которая гранулярно разрешает конкретные каталоги, COM-объекты и ресурсы даже для кода вне SafeMode. Профили задаются администратором в консоли кластера и действуют независимо от кода.

Опасно ли отключать безопасный режим для собственных обработок?

Риск ниже, если код написан вами и не выполняет деструктивных действий, но он не нулевой: ошибка в коде с полными правами может повредить файлы сервера или отправить данные не туда. Минимизируйте риск — тестируйте обработку на копии базы и дополнительно ограничивайте её профилем безопасности кластера.

Итог

Что важно запомнить

Безопасный режим — встроенная защита платформы 1С, блокирующая доступ внешних обработок к файлам, сети, COM и запуску программ. Дополнительные обработки БСП выполняются в нём по умолчанию. Отключайте режим только для проверенного кода и при реальной необходимости, а обработки по возможности проектируйте совместимыми с SafeMode: файловые операции — на клиенте, без динамического Выполнить().