BSL247 — Использование привилегированного режима¶
Кратко¶
Использование привилегированного режима
Идентификаторы¶
| Поле | Значение |
|---|---|
| Код правила | BSL247 |
| Совместимый псевдоним | SetPrivilegedMode |
| Серьёзность | WARNING |
| Включено по умолчанию | Да |
| Реализовано | Да |
| Теги | security |
Поведение¶
- Публичный идентификатор
BSL247и псевдонимSetPrivilegedModeстабильны. - Правило сообщает о случаях, описанных на этой странице.
- Подавления и проектная конфигурация применяются до публикации результата.
- Для выполнения правила не требуется внешний анализатор или сетевой доступ.
Настройка и подавление¶
Код BSL### — основной стабильный идентификатор. Совместимый псевдоним
принимается в select, ignore и совместимых блоковых комментариях.
Все три семейства подавлений работают для текущей строки и диапазона. Если открывающий комментарий стоит после кода, он действует только на эту строку. Используйте любой один вариант:
noqa:
bsl-disable(совместимый вариант):
- совместимый
BSLLS-вариант:
Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:
// noqa: BSL247
// код без этой диагностики
// noqa-enable: BSL247
// bsl-disable: BSL247
// код без этой диагностики
// bsl-enable: BSL247
// BSLLS:SetPrivilegedMode-off
// код без этой диагностики
// BSLLS:SetPrivilegedMode-on
Чтобы отключить правило до конца файла, не добавляйте закрывающий
noqa-enable, bsl-enable или BSLLS:…-on.
Открывающий и закрывающий маркеры должны принадлежать одному семейству.
Описание диагностики¶
Текущее правило находит код установки привилегированного режима. Для внешнего кода, например, кода из внешних отчетов\обработок, это действие может быть небезопасным.
По найденным замечаниям необходимо выполнить ручной аудит кода на предмет его правильности и безопасности.
Правило находит вызовы метода УстановитьПривилегированныйРежим
вызов УстановитьПривилегированныйРежим(Ложь) игнорируется
Потенциально опасны любые экспортные процедуры и функции, которые выполняют на сервере какие-либо действия с предварительной безусловной установкой привилегированного режима, так как это отключает проверку прав доступа текущего пользователя. Особого внимания требуют экспортные процедуры и функции клиентского прикладного программного интерфейса сервера 1С:Предприятия.
Например, неправильно:
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
...
КонецПроцедуры
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт
// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
...
КонецПроцедуры
Если все-таки необходимо использовать привилегированный режим внутри метода, следует использовать проверку прав доступа вручную, следует использовать метод ВыполнитьПроверкуПравДоступа.
Пример предварительной проверки перед выполнением действий в привилегированном режиме:
Процедура ИзменитьИлиУдалитьДанные(...) Экспорт
ВыполнитьПроверкуПравДоступа(...); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
...
КонецПроцедуры
Примеры¶
УстановитьПривилегированныйРежим(Истина); // есть замечание
Значение = Истина;
УстановитьПривилегированныйРежим(Значение); // есть замечание
УстановитьПривилегированныйРежим(Ложь); // нет замечания