Как полностью отключить защиту от опасных действий в 1С 8.3 для внешних обработок и COM-соединений

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

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

В этой статье мы подробно разберем, как правильно настроить платформу 1С для отключения этих предупреждений, исправим частые ошибки при работе с файлом конфигурации conf.cfg, научимся отключать защиту для конкретных баз по маске и разберемся, как победить повторное предупреждение при использовании COM-соединений.

Почему возникает предупреждение безопасности и как устроен механизм защиты

Прежде чем переходить к настройкам, проанализируем суть механизма. Защита от опасных действий срабатывает в тот момент, когда платформа определяет запуск кода, способного нанести вред операционной системе или данным. К таким действиям платформа относит:

  1. Запуск внешних отчетов и обработок.
  2. Подключение расширений конфигурации.
  3. Создание COM-объектов (например, V83.COMConnector для связи с другими базами 1С или объектов автоматизации MS Office).
  4. Загрузку внешних бинарных файлов и библиотек dll.
  5. Выполнение команд операционной системы через метод ЗапуститьПриложение.

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

  1. Если у текущего пользователя в конфигураторе сброшен флажок «Защита от опасных действий», то защита для большинства операций интерактивного запуска считается отключенной.
  2. Если строка соединения с информационной базой удовлетворяет одному из шаблонов, указанных в параметре DisableUnsafeActionProtection файла конфигурации conf.cfg, то защита отключается на глобальном уровне для всей базы.
  3. Если защита явным образом отключена с помощью параметра ЗащитаОтОпасныхДействий при программном подключении внешней обработки или отчета.
  4. Если защита программно отключена с помощью свойства расширения ЗащитаОтОпасныхДействий перед вызовом метода записи этого объекта.

Шаг 1. Исправление синтаксиса регулярных выражений в файле conf.cfg

Чаще всего администраторы пытаются отключить защиту глобально, прописав специальный параметр в конфигурационном файле conf.cfg. Однако здесь кроется самая распространенная ошибка синтаксиса, из-за которой настройки просто игнорируются или платформа начинает выдавать системные ошибки.

Рассмотрим ситуацию: администратор прописывает в файле следующую строку:

DisableUnsafeActionProtection=*.*;

При таком написании предупреждения продолжают появляться, а в технологическом журнале может регистрироваться ошибка с кодом 10301 (U_REGEX_RULE_SYNTAX). Выясним причину этой ошибки. Дело в том, что платформа 1С использует стандарт регулярных выражений POSIX BRE (Basic Regular Expressions) для обработки строки параметра DisableUnsafeActionProtection.

В синтаксисе POSIX BRE символ звездочки * означает «ноль или более повторений предыдущего символа». Если поставить звездочку в самом начале регулярного выражения (как в маске файла *.*), движок регулярных выражений выдаст ошибку синтаксиса, поскольку перед первой звездочкой нет символа, к которому она должна применяться.

Для правильного глобального отключения защиты для всех баз без исключения необходимо использовать корректное регулярное выражение, где точка . означает любой символ, а звездочка * — любое количество повторений этого символа. Запишем правильный вариант:

DisableUnsafeActionProtection=.*;

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

Шаг 2. Как прописать маску для конкретной базы (на примере серверной базы tpk_liga)

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

Строка соединения для файловой базы выглядит следующим образом:

File="D:\1C_Bases\Accounting";

Строка соединения для серверной базы имеет другой формат:

Srvr="ServerName";Ref="tpk_liga";

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

Настроим маску для серверной базы с именем tpk_liga. Для этого в файле conf.cfg мы можем прописать один из следующих рабочих вариантов:

  1. Простой вариант (поиск вхождения имени базы в строку соединения): DisableUnsafeActionProtection=.*tpk_liga.*

    Этот вариант отключит проверку для любой базы, в имени которой содержится строка "tpk_liga".

  2. Строгий вариант (с точным указанием параметра Ref): DisableUnsafeActionProtection=.*Ref="tpk_liga".*

    Этот вариант более безопасен, так как он точно указывает платформе искать конкретную базу на сервере приложений 1С. Кавычки внутри регулярного выражения экранировать не нужно.

  3. Вариант для нескольких баз (разделение точкой с запятой): DisableUnsafeActionProtection=.*tpk_liga.*;.*test_base.*

Шаг 3. Решение проблемы с COM-соединениями и запуском бинарных файлов

Даже после успешного прописывания параметров в conf.cfg многие разработчики сталкиваются с тем, что при попытке программного создания COM-объекта (например, V83.COMConnector) платформа продолжает выдавать предупреждение: «Разрешить подключать исполнимые бинарные файлы для данного модуля?».

Разберем природу этого явления. Платформа 1С разделяет защиту на два независимых контура:

  1. Контур загрузки внешнего файла: срабатывает при открытии обработки. За этот контур отвечает параметр DisableUnsafeActionProtection и флажок пользователя в конфигураторе.
  2. Контур исполнения опасного кода (подключение бинарных файлов): срабатывает непосредственно внутри модуля в момент вызова COM-объекта или внешней DLL. Платформа видит, что модуль внешней обработки пытается обратиться к внешним системным библиотекам Windows, и блокирует это действие в целях безопасности.

Чтобы полностью победить эту проблему и обеспечить стабильный запуск COM-соединений в автоматическом режиме (например, в регламентных заданиях), необходимо выполнить комплекс действий.

Во-первых, определим правильное расположение файла conf.cfg.

Параметр DisableUnsafeActionProtection применяется на том компьютере, который непосредственно выполняет код 1С:

Во-вторых, настроим учетную запись для регламентных заданий в базе данных.

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

  1. Откроем базу в режиме Конфигуратор.
  2. Перейдем в меню Администрирование — Пользователи.
  3. Создадим нового пользователя (например, с именем Робот_Обмена) или откроем существующего.
  4. На вкладке «Основные» найдем опцию «Защита от опасных действий» и в обязательном порядке снимем этот флажок.
  5. Сохраним настройки пользователя.

Теперь настроим выполнение нашего регламентного задания именно под этим пользователем. Сделать это можно интерактивно через консоль регламентных заданий в режиме «1С:Предприятие», указав имя созданного пользователя в параметрах регламентного задания.

Шаг 4. Программный способ отключения защиты у пользователя

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

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


// Определим имя нашего служебного пользователя
ИмяПользователяРегламентов = "Робот_Обмена";

// Найдем пользователя в списке пользователей информационной базы
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяРегламентов);

Если ПользовательИБ <> Неопределено Тогда
    // Обратимся к свойству защиты от опасных действий
    ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
    
    // Запишем изменения в базу данных
    ПользовательИБ.Записать();
    ЗаписьЖурналаРегистрации("Безопасность", СистемнаяИнформацияПошлины.УровеньЖурналаРегистрации.Информация,,, 
        "Защита от опасных действий успешно отключена для пользователя: " + ИмяПользователяРегламентов);
КонецЕсли;

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

Шаг 5. Программное отключение защиты при подключении внешней обработки

Если вы разрабатываете собственную систему запуска внешних обработок и не хотите заставлять администраторов править файл conf.cfg, вы можете программно отключить защиту непосредственно в момент подключения обработки с помощью параметра ЗащитаОтОпасныхДействий менеджера внешних обработок.

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


// Укажем путь к файлу внешней обработки на диске
ПутьКФайлу = "C:\Exchange\UploadData.epf";

// Создадим описание защиты от опасных действий с признаком отключения предупреждений
ПараметрыЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ПараметрыЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;

Попытка
    // Подключаем внешнюю обработку, передавая параметры защиты третьим аргументом
    ИмяВнешнейОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, , ПараметрыЗащиты);
    
    // Создаем объект обработки и выполняем ее экспортный метод
    ОбъектОбработки = ВнешниеОбработки.Создать(ИмяВнешнейОбработки);
    ОбъектОбработки.ВыполнитьВыгрузкуДанных();
    
Исключение
    ЗаписьЖурналаРегистрации("ОшибкаПодключения", УровеньЖурналаРегистрации.Ошибка,,, 
        "Не удалось подключить обработку: " + ОписаниеОшибки());
КонецПопытки;

Шаг 6. Настройка безопасного режима БСП и профилей безопасности

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

В безопасном режиме выполнение любых потенциально опасных операций (включая работу с COM-объектами) заблокировано на уровне ядра платформы 1С. В этом случае никакие настройки файла conf.cfg вам не помогут — система будет выдавать ошибку: «Установлен безопасный режим. Выполнение операции запрещено».

Для исправления этой ситуации выполним следующие шаги:

  1. Зайдем в информационную базу под правами администратора.
  2. Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  3. Найдем в списке нужную обработку обмена и откроем ее карточку.
  4. В поле «Режим безопасности» изменим значение с «Безопасный» на «Небезопасный» (в некоторых конфигурациях этот параметр называется «Разрешить работу без ограничений» или требует настройки профилей безопасности).
  5. Если в вашей системе на уровне кластера серверов 1С включены и используются профили безопасности, системному администратору потребуется зайти в консоль администрирования кластера и явно разрешить использование конкретных COM-классов (CLSID) или внешних программ в профиле безопасности, назначенном для данной информационной базы.

Таким образом, комбинируя правильный синтаксис файла conf.cfg, программное отключение защиты у служебных пользователей и корректную настройку безопасного режима в дополнительных обработках БСП, мы можем полностью автоматизировать запуск любых внешних модулей и COM-соединений без ущерба для стабильности системы.

← На главную