Использование привилегированного режима (SetPrivilegedMode)¶
Тип | Поддерживаются языки |
Важность | Включена по умолчанию |
Время на исправление (мин) |
Теги |
---|---|---|---|---|---|
Потенциальная уязвимость |
BSL |
Важный |
Да |
1 |
suspicious |
Описание диагностики¶
Текущее правило находит код установки привилегированного режима. Для внешнего кода, например, кода из внешних отчетов\обработок, это действие может быть небезопасным.
По найденным замечаниям необходимо выполнить ручной аудит кода на предмет его правильности и безопасности.
Правило находит вызовы метода УстановитьПривилегированныйРежим
вызов УстановитьПривилегированныйРежим(Ложь)
игнорируется
Потенциально опасны любые экспортные процедуры и функции, которые выполняют на сервере какие-либо действия с предварительной безусловной установкой привилегированного режима, так как это отключает проверку прав доступа текущего пользователя. Особого внимания требуют экспортные процедуры и функции клиентского прикладного программного интерфейса сервера 1С:Предприятия.
Например, неправильно:
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
...
КонецПроцедуры
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт
// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
...
КонецПроцедуры
Если все-таки необходимо использовать привилегированный режим внутри метода, следует использовать проверку прав доступа вручную, следует использовать метод ВыполнитьПроверкуПравДоступа
.
Пример предварительной проверки перед выполнением действий в привилегированном режиме:
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт
ВыполнитьПроверкуПравДоступа(...); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
...
КонецПроцедуры
Примеры¶
УстановитьПривилегированныйРежим(Истина); // есть замечание
Значение = Истина;
УстановитьПривилегированныйРежим(Значение); // есть замечание
УстановитьПривилегированныйРежим(Ложь); // нет замечания
Источники¶
- Источник: Стандарт: Использование привилегированного режима
- Источник: Стандарт: Безопасность прикладного программного интерфейса сервера
- Источник: Стандарт: Ограничение на выполнение «внешнего» кода
Сниппеты¶
Экранирование кода¶
// BSLLS:SetPrivilegedMode-off
// BSLLS:SetPrivilegedMode-on
Параметр конфигурационного файла¶
"SetPrivilegedMode": false