動態

詳情 返回 返回

Stimulsoft 報表腳本執行模式風險與防護建議 - 動態 詳情

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 為企業提供強大的數據可視化能力,同時也為開發者預留了靈活的安全配置選項。但是,啓用高級功能(例如編譯模式)時,限制用户輸入和隔離執行環境的責任由應用程序開發人員自行承擔。

user avatar chengxuyuanlaoliu2024 頭像 thosefree 頭像 xiaolei_599661330c0cb 頭像
點贊 3 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.