【安全提示】Stimulsoft 报表脚本执行模式风险与防护建议

发布时间 : 2025-10-17 10:16:02.030|阅读 12 次

概述:近日,Stimulsoft 官方再次提醒开发者注意在报表加载与脚本执行过程中可能存在的安全风险,特别是在使用 “Compilation(编译)计算模式” 时。

相关链接:

Stimulsoft 是一款专业的商业智能报表与数据可视化工具套件,广泛应用于企业级系统中,用于快速构建交互式报表、仪表盘和数据分析界面。其产品支持 .NET、JavaScript、PHP、Java 等多种开发平台,帮助开发者以可视化方式展现复杂数据,实现灵活的企业信息展示与决策支持。

近日,Stimulsoft 官方再次提醒开发者注意在报表加载与脚本执行过程中可能存在的安全风险,特别是在使用 “Compilation(编译)计算模式” 时。

Stimulsoft Ultimate 官方试用版下载


⚠️ 潜在风险说明

当报表的计算模式被设置为 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 为企业提供强大的数据可视化能力,同时也为开发者预留了灵活的安全配置选项。但是,启用高级功能(例如编译模式)时,限制用户输入和隔离执行环境的责任由应用程序开发人员自行承担。

---------------------------------------------------------------------------

关于慧都科技:

慧都科技是一家行业数字化解决方案公司,长期专注于软件、油气与制造行业。公司基于深入的业务理解与管理洞察,以系统化的业务建模驱动技术落地,帮助企业实现智能化运营与长期竞争优势。在软件工程领域,我们提供开发控件、研发管理、代码开发、部署运维等软件开发全链路所需的产品,提供正版授权采购、技术选型、个性化维保等服务,帮助客户实现技术合规、降本增效与风险可控。慧都科技是Stimulsoft的在中国区的合作伙伴,Stimulsoft作为图表报表领域的优秀产品,帮助企业实现轻松构建高性能的表格报告及图表。

下载|体验更多Stimulsoft产品联系在线客服咨询,或拨打产品热线:023-68661681

加入图表报表技术交流QQ群(740060302),与更多小伙伴一起探讨提升开发技能。


扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP