In diesem Artikel möchten wir Sie erneut an die Risiken erinnern, die mit dem Ausführen von kompilierten Skripten in Berichten verbunden sind – und folglich auch an die Risiken von Angriffen beim Laden von Berichten oder Dashboards.
Der Punkt ist: wenn der Berechnungsmodus eines Berichts auf Kompilation eingestellt ist, besteht beim Öffnen im Web-Viewer die Möglichkeit, eingebetteten Code auszuführen. Dieser Code kann auf dem Server kompiliert und ausgeführt werden, was potenziell die Tür für das Remote-Ausführen unsicheres Codes öffnet. Übrigens haben wir in diesem Artikel die Schutzmechanismen beim Öffnen eines Berichts mit Kompilation im Berichtdesigner näher betrachtet.Bemerken Sie!

Stimulsoft enthält keine eingebauten Schwachstellen, die ohne das Zutun des Anwendungsentwicklers ausgenutzt werden könnten. Eine solche Bedrohung entsteht nur bei einer bestimmten Projektkonfiguration – insbesondere dann, wenn der Berechnungsmodus auf Kompilation eingestellt ist und Benutzerberichte ohne vorherige Validierung ihres Inhalts hochgeladen werden dürfen.

Schutzempfehlungen

Um die Risiken zu minimieren, empfehlen wir folgenden Aktionen zu erfüllen:
  • Deaktivieren vom Kompilationsmodus
    Der Berechnungsmodus Kompilation sollte nur bei tatsächlichem Bedarf und ausschließlich in einer vertrauenswürdigen Umgebung verwendet werden. In den meisten Fällen empfehlen wir die Verwendung des Modus Interpretation, der dabei kein Code zur Laufzeit kompiliert und somit die Möglichkeit einer Remote Code Execution (RCE) schließt aus. Sie können den Berechnungsmodus eines Berichts entweder über die Vorlageneigenschaft im Berichtdesigner oder programmgesteuert für alle Berichte in Ihrer Anwendung ändern:
    report.CalculationMode == StiCalculationMode.Interpretation
    Zusätzlich, mit globaler Option der Komponente Viewer kann man das Laden von Berichten im Berechnungsmodus Kompilation verbieten:
    StiOptions.Viewer.AllowOpenDocumentWithCompilation = false;
  • Verwendung von Skripten in Interpretation
    In der Version 2025.3 wurde für den Berichtsgenerator auf Plattformen .NET und .NET Framework die Möglichkeit hinzugefügt, die C#-Skripte im Interpretationsmodus in Interpretation während der Bericht-Berechnung auszuführen. Im Skript-Beschreibung können Sie Report‑Variablen, Datenspalten, Funktionen, einschließlich benutzerdefinierte, grundlegende C#‑Konstrukte - if, else, ternärer Operator, Schleifen verwenden. Die Skripte können in Ereignissen, Benutzerfunktionen, Berichtsausdrücken, Ausdrücken der Komponenten, Variablen, berechneten Spalten ausgeführt werden. Um die vollständige Ausführung von Skripten zu deaktivieren, setzen Sie die Berichts‐Eigenschaft „Skripts-Ausführen erlauben“ auf Falsch. Für eingebettete Komponenten gibt es eine globale Option – StiOptions.Engine.AllowScriptsToRun, die das Ausführen von Skripten im Interpretationsmodus aktiviert oder deaktiviert.

    In diesem Fall ist die Funktionalität für die meisten Aufgaben ausreichend und zugleich praktisch sicher, da keine Möglichkeit besteht, dem System zu schaden oder schädlichen Code auszuführen.

  • Filterung von ankommenden Daten
    Wenn Ihre Anwendung das Hochladen von Berichten durch Benutzer erlaubt, stellen Sie sicher, dass:
    • Die hochgeladene Datei validiert wird (zum Beispiel durch XML-/JSON-Analyse auf unerlaubte Inhalte);
    • Das Ausführen vom Benutzer-Code deaktiviert ist;
    • Hochgeladene Berichte nur in einer isolierten Umgebung gespeichert und verarbeitet werden;
    • Dem aktuellen Systembenutzer nur die unbedingt erforderlichen Datei- und Datenzugriffsrechte gewährt werden.

Abfangen von Client-seitigen Aktionen

Als vorübergehende Lösung können Sie Code verwenden, um Aktionen von Viewer-Steuerelementen wie Öffnen abzufangen und so das Laden potenziell schädlicher Dateien zu blockieren.

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);
}
...

Noch einmal betonen wir:

  • Stimulsoft‑Produkte enthalten keine bekannten eingebauten Schwachstellen, die ohne das Zutun des Anwendungsentwicklers ausgenutzt werden könnten;
  • Die Sicherheit der Anwendung hängt vom Verwendungskontext und der Konfiguration der Laufzeitumgebung ab;
  • Die Möglichkeit, Programmiersprachen-Code in Berichten auszuführen, wird als Funktionalität bereitgestellt und ist kein verpflichtendes Verhalten. Wir bieten flexible Konfigurationsoptionen: von strenger Interpretation ohne Code bis hin zu einer vollständig kompilierbaren Umgebung.

Wir empfehlen die Verwendung des Kompilierungsmodus nicht, wenn:
  • Sie sind nicht sicher, warum Sie ihn benötigen, oder die bereitgestellte Funktionalität nicht nutzen;
  • Das Hochladen eigener Berichte für die Benutzer erlaubt ist;
  • Es gibt keine zusätzliche Filterung oder Isolierung der Ausführungsumgebung.

Stimulsoft bietet umfangreiche Möglichkeiten zur Datenvisualisierung, einschließlich der Verwendung von Skripten und Logik in Berichten und Dashboards. Bei der Aktivierung erweiterter Funktionen (wie dem Kompilierungsmodus) liegt die Verantwortung für die Einschränkung der Benutzereingaben und die Isolierung der Ausführungsumgebung jedoch bei den Anwendungsentwicklern selbst. Wenn Sie Zweifel haben oder Beratung benötigen, wenden Sie sich bitte direkt an unseren technischen Support.
By using this website, you agree to the use of cookies for analytics and personalized content. Cookies store useful information on your computer to help us improve efficiency and usability. For more information, please read the privacy policy and cookie policy.