#std770¶
Ограничения на использование Выполнить и Вычислить на сервере¶
1.¶
Опасность представляет не только прямое выполнение кода пользователя, но и выполнение строк, собранных из параметров и переданных в серверные процедуры/функции.
Ограничение относится к серверному коду.
Если в серверном методе используется Выполнить или Вычислить для строки из параметров, злоумышленник может подменить эту строку и запустить вредоносный код на сервере.
Риск выше, если такой метод доступен из модуля с признаком
-
ВызовСервера
2.¶
Перед вызовом Выполнить/Вычислить в серверном коде включайте безопасный режим.
В модели сервиса учитывайте разделение данных: безопасный режим включайте и для разделителей.
Пример (модель сервиса)
Если используется БСП, применяйте:
ОбщегоНазначения.ВыполнитьВБезопасномРежиме()вместоВыполнить;ОбщегоНазначения.ВычислитьВБезопасномРежиме()вместоВычислить;ОбщегоНазначения.ВыполнитьМетодКонфигурации()иОбщегоНазначения.ВыполнитьМетодОбъекта()вместо формирования строк вызова.
Проверки¶
#v8cs:server-execution-safe-mode
3.¶
Если код нельзя выполнить в безопасном режиме (например, есть доступ к файлам), запускайте его только после аудита и только из контролируемого источника.
Рекомендуемый сценарий:
- передать внешний код администратору на аудит;
- хранить одобренный код в объекте, доступном на запись только администратору;
- выполнять код только через централизованную процедуру/функцию.
При использовании БСП для этого применяйте подсистему дополнительных отчетов и обработок.
4.¶
Если конфигурация работает в модели сервиса и поддерживает перенос из локальной версии, отключайте пользовательские фрагменты кода и тексты запросов, пришедшие из локальной базы.
См. также¶
- #std669: Ограничение на выполнение "внешнего" кода
- #std678: Безопасность прикладного программного интерфейса сервера
- Облачные технологии
Проверки¶
#bslls:DisableSafeMode #bslls:ExecuteExternalCodeInCommonModule #bslls:ExecuteExternalCode
#acc:486 #acc:487 #acc:488 #acc:489 #acc:490