Перейти к содержанию

Использование привилегированного режима (SetPrivilegedMode)

Тип Поддерживаются
языки
Важность Включена
по умолчанию
Время на
исправление (мин)
Теги
Потенциальная уязвимость BSL Важный Да 1 suspicious

Описание диагностики

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

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

Правило находит вызовы метода УстановитьПривилегированныйРежим вызов УстановитьПривилегированныйРежим(Ложь) игнорируется

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

Например, неправильно:

Процедура ИзменитьИлиУдалитьДанные(...) Экспорт

УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
...
КонецПроцедуры
Правильно:
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт

// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
...

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

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

Пример предварительной проверки перед выполнением действий в привилегированном режиме:

Процедура ИзменитьИлиУдалитьДанные(...) Экспорт

ВыполнитьПроверкуПравДоступа(...); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа

// Изменяем данные в привилегированном режиме
...
КонецПроцедуры

Примеры

    УстановитьПривилегированныйРежим(Истина); // есть замечание

    Значение = Истина;
    УстановитьПривилегированныйРежим(Значение); // есть замечание

    УстановитьПривилегированныйРежим(Ложь); // нет замечания

Источники

Сниппеты

Экранирование кода

// BSLLS:SetPrivilegedMode-off
// BSLLS:SetPrivilegedMode-on

Параметр конфигурационного файла

"SetPrivilegedMode": false