Stimulsoft 报表脚本执行模式风险与防护建议
Stimulsoft 是一款专业的商业智能报表与数据可视化工具套件,广泛应用于企业级系统中,用于快速构建交互式报表、仪表盘和数据分析界面。其产品支持 .NET、JavaScript、PHP、Java 等多种开发平台,帮助开发者以可视化方式展现复杂数据,实现灵活的企业信息展示与决策支持。
近日,Stimulsoft 官方再次提醒开发者注意在报表加载与脚本执行过程中可能存在的安全风险,特别是在使用 “Compilation(编译)计算模式” 时。
⚠️ 潜在风险说明
当报表的计算模式被设置为 Compilation(编译)模式 时,在 Web Viewer 中打开报表时可能会执行嵌入代码。这些代码可能在服务器端被编译并运行,从而存在远程执行不安全代码(RCE)的风险。
需要特别说明的是:
Stimulsoft 本身并不存在可被直接利用的内置漏洞。
安全风险仅在特定项目配置下出现,例如:
报表计算模式设为 Compilation;
应用允许用户上传未经过验证的自定义报表文件。
✅ 官方安全建议
为了最大程度降低风险,Stimulsoft 官方建议开发者采取以下防护措施:
1. 禁用 Compilation 模式
仅在必要且受信任的环境下使用 Compilation 模式。
在大多数情况下,推荐启用 Interpretation(解释)模式,该模式不进行即时编译,从根本上消除了远程代码执行风险。
可通过以下方式设置:
report.CalculationMode = StiCalculationMode.Interpretation;
或通过全局 Viewer 参数禁用加载带 Compilation 模式的报表:
StiOptions.Viewer.AllowOpenDocumentWithCompilation = false;
2. 使用解释模式脚本
在 Stimulsoft Reports 2025.3 版本中,.NET 平台已支持在 Interpretation 模式下执行 C# 脚本。
开发者可在脚本中安全使用变量、数据列、自定义函数及基本控制语句(if、else、循环等),满足大多数业务逻辑需求,同时确保系统安全。
🔒 报表上传安全建议
若应用允许用户上传报表文件,请务必:
-
对上传文件进行结构验证(如 XML/JSON 内容分析);
-
禁止执行用户代码;
-
在隔离环境中保存与处理上传报表;
-
限制系统用户的文件与数据访问权限。
此外,还可以在前端 Viewer 中通过拦截 “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 产品不存在可直接利用的安全漏洞;
-
仅当错误配置与未过滤的用户输入结合时,才可能出现潜在风险;
-
如果出现以下情况,,不建议启用 Compilation 模式。
- 您不确定为什么需要它,或者您没有使用它提供的功能;
- 允许用户上传自己的报告;
- 没有额外的过滤或执行环境隔离。
Stimulsoft 为企业提供强大的数据可视化能力,同时也为开发者预留了灵活的安全配置选项。但是,启用高级功能(例如编译模式)时,限制用户输入和隔离执行环境的责任由应用程序开发人员自行承担。