358 документов
← К списку

Ограничения на использование Выполнить и Вычислить на сервере

страница

#std770

Область применения: управляемое приложение, обычное приложение.

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

Например, код написан следующим образом:

  • в клиентской функции в форме создается структура, в которую вставляется строка, написанная разработчиком конфигурации;
  • клиентская функция передает эту структуру в серверную функцию формы;
  • серверная функция формы вызывает серверную функцию общего модуля;
  • в серверной функции исполняется код из строки, вставленной в структуру.

В этом случае не выполняется код, который интерактивно вводит пользователь, но, тем не менее, есть следующая уязвимость:

  • злоумышленник создает структуру, в которую вставляет строку с вредоносным кодом;
  • злоумышленник вызывает клиентскую функцию формы и таким образом исполняет вредоносный код на сервере.

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

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

УстановитьБезопасныйРежим(Истина);
Выполнить Алгоритм;

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

УстановитьБезопасныйРежим(Истина);

Для каждого ИмяРазделителя Из РазделителиКонфигурации() Цикл
    УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина);
КонецЦикла;

Выполнить Алгоритм;

При использовании в конфигурации Библиотеки стандартных подсистем, следует использовать:

  • ОбщегоНазначения.ВыполнитьВБезопасномРежиме() вместо Выполнить;
  • ОбщегоНазначения.ВычислитьВБезопасномРежиме() вместо Вычислить;
  • ОбщегоНазначения.ВыполнитьМетодКонфигурации() вместо формирования строки вызова метода модуля и передачи ее в Выполнить, Вычислить;
  • ОбщегоНазначения.ВыполнитьМетодОбъекта() вместо формирования строки вызова метода объекта и передачи ее в Выполнить, Вычислить.

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

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

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

4. Если конфигурация рассчитана на работу в модели сервиса, и в конфигурации предусмотрен перенос данных в сервис из локальной версии программы, необходимо обеспечить отключение всех пользовательских фрагментов кода или текстов запросов, которые были введены в локальной версии.

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

См. также