Безопасный режим работы

Печать (Ctrl+P)

Объекты конфигурации

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

В безопасном режиме:

  • Привилегированный режим отменяется.
  • Переход в привилегированный режим игнорируется.
  • Запрещены операции, приводящие к использованию внешних средств по отношению к платформе «1С:Предприятие» (включая неблокирующие аналоги указанных методов):
  • Механизмы COM:
    • COMОбъект();
    • ПолучитьCOMОбъект();
    • ОболочкаHTMLДокумента.ПолучитьCOMОбъект().
  • Загрузка внешних компонентов:
    • ЗагрузитьВнешнююКомпоненту();
    • ПодключитьВнешнююКомпоненту().
  • Доступ к файловой системе:
    • ЗначениеВФайл();
    • КопироватьФайл();
    • ОбъединитьФайлы();
    • ПереместитьФайл();
    • РазделитьФайл();
    • СоздатьКаталог();
    • УдалитьФайлы();
    • Новый Файл;
    • Новый xBase;
    • ЗаписьHTML.ОткрытьФайл();
    • ЧтениеHTML.ОткрытьФайл();
    • ЧтениеXML.ОткрытьФайл();
    • ЗаписьXML.ОткрытьФайл();
    • ЧтениеFastInfoset.ОткрытьФайл();
    • ЗаписьFastInfoset.ОткрытьФайл();
    • КаноническаяЗаписьXML.ОткрытьФайл();
    • ПреобразованиеXSL.ЗагрузитьИзФайла();
    • ЗаписьZipФайла.Открыть();
    • ЧтениеZipФайла.Открыть();
    • Новый ЧтениеТекста(), если первый параметр ‑ строка;
    • ЧтениеТекста.Открыть(), если первый параметр ‑ строка;
    • Новый ЗаписьТекста(), если первый параметр ‑ строка;
    • ЗаписьТекста.Открыть(), если первый параметр ‑ строка;
    • Новый ИзвлечениеТекста();
    • изменение свойства ИзвлечениеТекста.ИмяФайла;
    • ИзвлечениеТекста.Записать();
    • Новый Картинка(), если первый параметр ‑ строка;
    • Картинка.Записать();
    • Новый ДвоичныеДанные();
    • ДвоичныеДанные.Записать();
    • Новый ЗаписьДанных(), если первый параметр ‑ строка;
    • Новый ЧтениеДанных(), есть первый параметр ‑ строка;
    • все методы объекта МенеджерФайловыхПотоков;
    • Новый ФайловыйПоток();
    • ФорматированныйДокумент.Записать();
    • ГеографическаяСхема.Прочитать();
    • ГеографическаяСхема.Записать();
    • ГеографическаяСхема.Напечатать();
    • ТабличныйДокумент.Прочитать();
    • ТабличныйДокумент.Записать();
    • ТабличныйДокумент.Напечатать(); ГрафическаяСхема.Прочитать();
    • ГрафическаяСхема.Записать();
    • ГрафическаяСхема.Напечатать();
    • ТекстовыйДокумент.Прочитать();
    • ТекстовыйДокумент.Записать().
  • Доступ к Интернету:
    • Новый ИнтернетСоединение,
    • Новый ИнтернетПочта,
    • Новый ИнтернетПрокси,
    • Новый HTTPСоединение,
    • Новый FTPСоединение.

ВНИМАНИЕ! При выполнении запрещенных операций во время выполнения генерирует исключение.

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

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

Если в процедуре или функции вызовов метода УстановитьБезопасныйРежим(Ложь) сделано больше, чем вызовов метода УстановитьБезопасныйРежим(Истина), то будет вызвано исключение.

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

// Формируется программный код, который следует исполнить
// Возможно, что код загружается из внешних источников
// или введен вручную
ИсполняемыйКод = ПолучитьВыполняемыйКодИзВнешнегоМира();
// Включим безопасный режим
УстановитьБезопасныйРежим(Истина);
// Выполним потенциально опасный код
Выполнить(ИсполняемыйКод);
// Выключим безопасный режим
УстановитьБезопасныйРежим(Ложь);

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

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

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

// Корректное использование
Процедура ИмяПроцедуры()
    УстановитьОтключениеБезопасногоРежима(Истина);
    УстановитьБезопасныйРежим(Истина);
    УстановитьБезопасныйРежим(Ложь);
    УстановитьОтключениеБезопасногоРежима(Ложь);
КонецПроцедуры
// Некорректное использование
Процедура ИмяПроцедуры()
    УстановитьОтключениеБезопасногоРежима(Истина);
    УстановитьБезопасныйРежим(Истина);
    УстановитьОтключениеБезопасногоРежима(Ложь); // Исключение
КонецПроцедуры
Процедура ИмяПроцедуры()
    УстановитьБезопасныйРежим(Истина);
    УстановитьОтключениеБезопасногоРежима(Ложь); // Исключение
КонецПроцедуры
Previous Article
Next Article

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.