В этой статье мы хотим еще раз напомнить о рисках, связанных с выполнением скомпилированных скриптов в отчетах, и, как следствие, рисках атак при загрузке отчетов или дашбордов.
Дело в том, что если режим вычисления в отчете установлен как Компиляция (Compilation), то при его открытии в веб-вьювере присутствует возможность выполнить внедренный код. Этот код может быть скомпилирован и исполнен на сервере, что, в свою очередь, потенциально открывает возможности к удаленному выполнению небезопасного кода. К слову, ступени защиты при открытии отчета с компиляцией в дизайнере отчетов, мы рассмотрели в этой статье.Обратите внимание!
Stimulsoft не содержит встроенных уязвимостей, которые могут быть эксплуатированы без участия разработчика приложения. Подобная угроза проявляется только при определенной конфигурации проекта, в частности – при включенном режиме вычисления как Компиляция и разрешенной загрузке пользовательских отчетов без предварительной валидации содержимого.
C#
Мы не рекомендуем использовать режим вычисления как Компиляция, если:
Stimulsoft предоставляет широкие возможности по визуализации данных, включая использование скриптов и логики внутри отчетов и дашбордов. Однако при включении расширенных возможностей (например, режима компиляции) ответственность за ограничение пользовательского ввода и изоляцию среды исполнения лежит на плечах самих разработчиков приложения. Если у вас возникли сомнения или нужны советы — пожалуйста, обращайтесь напрямую в нашу техническую поддержку.
Stimulsoft не содержит встроенных уязвимостей, которые могут быть эксплуатированы без участия разработчика приложения. Подобная угроза проявляется только при определенной конфигурации проекта, в частности – при включенном режиме вычисления как Компиляция и разрешенной загрузке пользовательских отчетов без предварительной валидации содержимого.
Рекомендации по защите
Для минимизации рисков мы рекомендуем следующие шаги:- Отключение режима компиляции
Режим вычисления отчета как Компиляция необходимо использовать только при необходимости и только в доверенной среде. В большинстве сценариев мы рекомендуем использовать режим вычисления отчета как Интерпретация (Interpretation), который не компилирует код на лету и исключает возможность RCE (Remote Code Execution). Изменить режим вычисления в отчете можно при помощи свойства шаблона в дизайнере отчетов либо в коде приложения для всех отчетов:
Дополнительно, при помощи глобальной опции компонента Вьювер можно запретить загружать отчеты в режиме вычисления Компиляция:report.CalculationMode == StiCalculationMode.Interpretation
StiOptions.Viewer.AllowOpenDocumentWithCompilation = false;
- Использование скриптов в интерпретации
В релизе 2025.3 для генератора отчетов под управлением платформы .NET и .NET Framework добавлена возможность выполнения CSharp скриптов в режиме вычисления отчета как Интерпретация (Interpretation). В описании скрипта можно использовать переменные отчета, колонки данных, функции, в том числе и пользовательские функции, а также основные конструкции CSharp такие как if, else, тернарный оператор, циклы. Скрипты могут быть выполнены в событиях, пользовательских функциях, выражениях отчета. Отключить выполнение скриптов можно при помощи свойства отчета Разрешить выполнение скриптов (Allow Scripts To Run). Для встраиваемых компонентов Stimulsoft предусмотрена глобальная опцияStiOptions.Engine.AllowScriptsToRun
для включения или выключения возможности выполнения скриптов в режиме Интерпретации.
В этом случае, функционал является достаточным для большинства задач, и в тоже время, фактически безопасным, так как отсутствует возможность навредить системе и запустить вредоносный код. - Фильтрация входящих данных
Если в приложении предусмотрена загрузка отчетов пользователями, следует убедиться, что:- Загружаемый файл проходит проверку (например, анализ XML/JSON на предмет недопустимого содержимого);
- Отключена возможность выполнения пользовательского кода;
- Загруженные отчеты сохраняются и обрабатываются только в изолированной среде;
- Текущему системному пользователю заданы только необходимые права доступа к файлам и данным.
Перехват действий на клиентской стороне
В качестве временного решения можно использовать код для перехвата действий элементов управления вьювера Открыть (Open), блокируя тем самым загрузку потенциально вредоносных файлов.C#
...
<body>
<form id="form1" runat="server">
<cc2:StiWebViewer runat="server" ID="StiWebViewer1" OnGetReport="StiWebViewer1_GetReport" />
</form>
<script>
jsStiWebViewer1.onready = function () {
jsStiWebViewer1.postAction_ = jsStiWebViewer1.postAction;
jsStiWebViewer1.postAction = function (action, bookmarkPage, bookmarkAnchor, componentGuid) {
if (action == "Open" || action == "OpenDashboard") {
//Write your code here for the "Open"
return;
}
jsStiWebViewer1.postAction_(action, bookmarkPage, bookmarkAnchor, componentGuid);
}
}
</script>
</body>
...
JavaScript
...
let viewer = new Stimulsoft.Viewer.StiViewer(viewerOptions, "StiViewer", false);
viewer.renderHtml("content");
viewer.jsObject.postAction_ = viewer.jsObject.postAction;
viewer.jsObject.postAction = function (action, bookmarkPage, bookmarkAnchor, componentGuid) {
if (action === "Open" || action === "OpenDashboard") {
//Write your code here for the "Open"
return;
}
viewer.jsObject.postAction_(action, bookmarkPage, bookmarkAnchor, componentGuid);
}
...
Еще раз хотим подчеркнуть:
- Продукты Stimulsoft не содержат известных нам встроенных уязвимостей, которые могут быть эксплуатированы без участия разработчика приложения;
- Безопасность приложения зависит от контекста использования и настройки среды выполнения;
- Возможность выполнения кода на языке программирования в отчетах предоставляется как функциональность, а не как обязательное поведение. Мы предоставляем гибкие опции конфигурации: от строгой интерпретации без кода до полного компилируемого окружения.
Мы не рекомендуем использовать режим вычисления как Компиляция, если:
- Вы не уверены, для чего это нужно, либо не используете возможности данного функционала;
- Пользователи могут загружать собственные отчеты;
- Нет дополнительной фильтрации или изоляции среды исполнения.
Stimulsoft предоставляет широкие возможности по визуализации данных, включая использование скриптов и логики внутри отчетов и дашбордов. Однако при включении расширенных возможностей (например, режима компиляции) ответственность за ограничение пользовательского ввода и изоляцию среды исполнения лежит на плечах самих разработчиков приложения. Если у вас возникли сомнения или нужны советы — пожалуйста, обращайтесь напрямую в нашу техническую поддержку.