Разработка и Конфигурация · 14 мин
Безопасный режим во внешних обработках 1С: что это и как устроен
Что такое безопасный режим во внешних обработках 1С, какие ограничения он накладывает, как его включить, отключить и проверить. Ошибки, риски и практические приёмы.
Безопасный режим в 1С — это специальный режим исполнения программного кода, при котором платформа блокирует потенциально опасные операции: доступ к файловой системе, запуск внешних приложений, загрузку внешних компонент, работу с COM-объектами и ряд других действий. Когда внешняя обработка или отчёт открывается из интерфейса «Дополнительные отчеты и обработки» (механизм БСП), её код по умолчанию выполняется именно в безопасном режиме.
Цель такого ограничения проста: внешние обработки часто получают от сторонних разработчиков или скачивают из открытых источников, и их код нельзя считать доверенным. Безопасный режим гарантирует, что даже вредоносная или ошибочная обработка не сможет прочитать файлы с диска сервера, удалить данные за пределами информационной базы, отправить информацию по сети или запустить произвольную программу.
Для разработчика и администратора важно понимать две вещи: какие именно операции блокируются и как законно управлять режимом — когда его стоит оставить, а когда допустимо отключить. Ошибки в этой области приводят либо к неработающим обработкам (код «молча» падает с ошибкой при попытке обратиться к файлу), либо к реальным уязвимостям, если безопасный режим отключён без необходимости.
Что такое безопасный режим и зачем он нужен
Безопасный режим (SafeMode) — это программный «песочный» контур внутри платформы 1С:Предприятие. Когда код исполняется в этом режиме, платформа перехватывает обращения к системным ресурсам и запрещает те из них, которые могут нанести вред серверу, клиентскому компьютеру или данным вне информационной базы.
Механизм актуален в первую очередь для трёх сценариев: выполнение внешних обработок и отчётов, подключённых через подсистему «Дополнительные отчеты и обработки» библиотеки стандартных подсистем (БСП); выполнение кода из строки через метод Выполнить() и Вычислить() в контекстах, где безопасный режим включён явно; работа расширений конфигурации с отключённой защитой от опасных действий.
Важно понимать, что безопасный режим не заменяет антивирус и не защищает от всех угроз. Он ограничивает только те операции, которые платформа способна контролировать на уровне встроенного языка. Логические ошибки в коде — например, некорректное изменение данных в самой базе — безопасный режим не предотвращает, поэтому проверка кода перед подключением обработки остаётся обязательной.
Какие операции блокируются в безопасном режиме
Перечень ограничений задан платформой и не настраивается произвольно — можно лишь включить или выключить режим целиком. Основные запреты:
- операции с файловой системой: чтение, запись, удаление файлов и каталогов (объекты
ТекстовыйДокументс записью на диск,Файл,ДиалогВыбораФайлав серверном контексте и т.п.); - запуск внешних приложений и команд операционной системы (
ЗапуститьПриложение,КомандаСистемы); - загрузка внешних компонент (
ПодключитьВнешнююКомпоненту); - создание COM-объектов и OLE-автоматизации (
Новый COMОбъект); - доступ в Интернет: HTTP-запросы, почтовые протоколы, FTP (
HTTPСоединение,ИнтернетПочта); - использование привилегированного режима (
УстановитьПривилегированныйРежимигнорируется или вызывает ошибку в зависимости от контекста); - операции с буфером обмена, журналом регистрации в части изменения, доступ к временным каталогам ОС.
Отдельно стоит запрет на метод Выполнить(): в безопасном режиме выполнение произвольного кода из строки запрещено, потому что так можно было бы обойти все остальные ограничения. Это частая причина отказа старых обработок, которые строят запросы и код динамически.
При этом внутри информационной базы обработка может работать практически без ограничений: читать и изменять данные объектов, выполнять запросы, формировать табличные документы, вызывать общие модули конфигурации (если у пользователя есть права). Безопасный режим ограничивает «выход наружу», а не работу с данными.
Найти в тексте ошибки модуль и строку, определить запрещённый вызов
Перенести файловые операции на клиента через НачатьПомещениеФайла
Заменить динамический вызов на явный код или отключить безопасный режим для доверенной обработки
Когда обработка выполняется в безопасном режиме
Наиболее распространённый случай — подключение внешней обработки через справочник «Дополнительные отчеты и обработки» (Администрирование → Печатные формы, отчеты и обработки). БСП при выполнении таких объектов вызывает их в безопасном режиме, если в карточке обработки не снят соответствующий флаг и если в настройках подсистемы не разрешён небезопасный режим.
Простое открытие файла .epf через «Файл → Открыть» в толстом клиенте обычно выполняется без безопасного режима — код получает полные возможности текущего сеанса. Именно поэтому запуск непроверенных файлов напрямую опаснее, чем подключение их через штатный механизм дополнительных обработок.
Ещё один контекст — расширения конфигурации. У расширения есть свойство «Безопасный режим» и флаг «Защита от опасных действий» при подключении. Если защита включена, а безопасный режим у расширения активен, код расширения работает с теми же ограничениями, что и внешняя обработка.
Роль профилей безопасности в кластере
В клиент-серверном варианте администратор кластера может назначить информационной базе профиль безопасности. Тогда даже код, выполняемый вне безопасного режима, получит доступ только к разрешённым каталогам, COM-объектам и ресурсам, описанным в профиле. Это второй, более тонкий уровень защиты, который не заменяет, а дополняет SafeMode.
Как проверить и как включить или отключить режим
Из кода текущее состояние проверяется функцией БезопасныйРежим() — она возвращает Истина, если код выполняется в безопасном режиме. Это удобно для диагностики: добавьте временный вывод значения в начало обработки, чтобы понять, в каком режиме она реально исполняется.
Программно включить режим можно методом УстановитьБезопасныйРежим(Истина) — например, перед вызовом Выполнить() для непроверенного кода. Обратное действие, УстановитьБезопасныйРежим(Ложь), изнутри безопасного режима невозможно: это было бы обходом защиты, поэтому платформа такой вызов запрещает.
Для внешних обработок, подключаемых через БСП, режим настраивается в интерфейсе. В карточке дополнительного отчёта или обработки есть команда «Безопасный режим» (или аналогичный флаг, в зависимости от версии БСП). Кроме того, в настройках подсистемы «Дополнительные отчеты и обработки» есть функциональная опция, запрещающая отключение безопасного режима в принципе — если она включена, снять флаг не получится.
- 1Убедитесь, что код обработки проверен: источник доверенный, текст модуля просмотрен, подозрительных вызовов нет
- 2Откройте Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки
- 3Откройте карточку нужной обработки и снимите флаг «Безопасный режим» (команда может называться «Отключить безопасный режим»)
- 4Сохраните карточку и запустите обработку от имени пользователя с рабочими правами
- 5Проверьте результат и журнал регистрации на предмет ошибок доступа
Как писать обработки, совместимые с безопасным режимом
Правильный подход — проектировать обработку так, чтобы она работала в SafeMode без исключений. Основной приём: все операции с файлами выполнять на клиенте через асинхронные методы (НачатьПомещениеФайла, НачатьПолучениеФайлов, диалоги выбора файлов), а на сервер передавать только содержимое — например, двоичные данные или текст. Файловые операции в клиентском контексте, инициированные пользователем через диалог, не блокируются так жёстко, как серверный доступ к диску.
Если обработке нужен обмен с внешним сервисом, рассмотрите перенос этой логики в конфигурацию — в общий модуль, который выполняется вне безопасного режима, а обработка пусть вызывает его методы. Дополнительные обработки БСП могут обращаться к серверным процедурам конфигурации, и ограничения SafeMode там уже не действуют, если сам модуль не вызывается в безопасном контексте.
Избегайте динамического выполнения кода через Выполнить(). Практически любую задачу, которую решают динамическим кодом (произвольные условия отбора, пользовательские формулы), можно реализовать через СКД, запросы с параметрами или заранее описанные алгоритмы. Это не только совместимо с SafeMode, но и безопаснее по сути.
Если БезопасныйРежим() Тогда
Сообщить("Обработка выполняется в безопасном режиме");
КонецЕсли;Частая ситуация: обработка, купленная или скачанная давно, после обновления конфигурации перестаёт работать с ошибкой безопасного режима. Причина обычно не в обработке, а в том, что при обновлении БСП карточка обработки пересоздалась с включённым SafeMode. Проверьте флаг в карточке до переписывания кода.
Риски отключения безопасного режима
Отключение SafeMode даёт коду обработки полный доступ к серверу 1С: файловой системе, сети, командной строке. Если в обработке есть вредоносный или просто ошибочный код, последствия могут быть серьёзными: утечка данных, шифрование файлов сервера, удаление каталогов, рассылка информации наружу. На клиент-серверном варианте код выполняется от имени учётной записи службы сервера 1С, у которой часто широкие права.
Поэтому действует простое правило: безопасный режим отключается только для обработок, чей код вы лично просмотрели или которые получены из полностью доверенного источника, и только тогда, когда без запрещённых операций задачу решить нельзя. Если обработка «из интернета» требует отключить SafeMode, а причин в её описании не указано — это тревожный признак.
Типичные ошибки и как их избежать
Отдельная ошибка администраторов — считать, что безопасный режим защищает данные самой базы. Это не так: обработка в SafeMode может изменять документы и справочники в рамках прав пользователя. Защиту данных обеспечивают роли и права доступа, а безопасный режим охраняет только ресурсы за пределами информационной базы.
Как проверить результат
Обработка открывается и выполняет свою функцию без ошибок
Ошибка «Операция не допустима в безопасном режиме» или «Метод не обнаружен»
Нет записей об ошибках доступа и безопасного режима
Повторяющиеся ошибки с указанием модуля внешней обработки
Состояние флага безопасного режима соответствует решению, принятому осознанно
Флаг снят, но никто не помнит, зачем и кем это сделано
Часто задаваемые вопросы
Может ли обработка в безопасном режиме изменить данные в базе?
Да. Безопасный режим не ограничивает работу с объектами информационной базы — документами, справочниками, регистрами. Он запрещает только операции за её пределами: файлы, сеть, запуск программ. Защиту данных обеспечивают роли и права пользователя, от имени которого запущена обработка.
Почему обработка работает при открытии через «Файл → Открыть», но падает из «Дополнительных обработок»?
При прямом открытии файла код выполняется без безопасного режима, а подсистема БСП запускает дополнительные обработки в SafeMode по умолчанию. Значит, в коде есть запрещённая операция — файловый доступ, COM, HTTP или Выполнить(). Нужно либо адаптировать код, либо осознанно снять флаг безопасного режима в карточке обработки.
Как узнать, какая именно операция запрещена?
Текст ошибки содержит имя модуля и номер строки. Откройте модуль обработки в конфигураторе, перейдите к указанной строке и определите вызов. Дополнительно полезно посмотреть журнал регистрации — туда попадает расширенное описание ошибки с контекстом.
Можно ли отключить безопасный режим из кода самой обработки?
Нет. Вызов УстановитьБезопасныйРежим(Ложь) изнутри безопасного режима запрещён платформой — иначе защита не имела бы смысла. Режим отключается только снаружи: настройкой карточки обработки в БСП или параметрами вызывающего кода конфигурации.
Чем безопасный режим отличается от профилей безопасности кластера?
Безопасный режим — программный переключатель «всё запрещено / всё разрешено» на уровне сеанса исполнения кода. Профиль безопасности — настройка кластера серверов, которая гранулярно разрешает конкретные каталоги, COM-объекты и ресурсы даже для кода вне SafeMode. Профили задаются администратором в консоли кластера и действуют независимо от кода.
Опасно ли отключать безопасный режим для собственных обработок?
Риск ниже, если код написан вами и не выполняет деструктивных действий, но он не нулевой: ошибка в коде с полными правами может повредить файлы сервера или отправить данные не туда. Минимизируйте риск — тестируйте обработку на копии базы и дополнительно ограничивайте её профилем безопасности кластера.
Что важно запомнить
Безопасный режим — встроенная защита платформы 1С, блокирующая доступ внешних обработок к файлам, сети, COM и запуску программ. Дополнительные обработки БСП выполняются в нём по умолчанию. Отключайте режим только для проверенного кода и при реальной необходимости, а обработки по возможности проектируйте совместимыми с SafeMode: файловые операции — на клиенте, без динамического Выполнить().