XSLT-Sicherheitsaspekte

Die Sprache XSLT verfügt über eine Vielzahl an Funktionen für eine hohe Leistungsfähigkeit und Flexibilität. Sie enthält viele Funktionen, die zwar hilfreich sind, jedoch auch von externen Quellen ausgenutzt werden können. Um die XSLT-Sicherheit zu verwenden, müssen Sie die verschiedenen Arten von Sicherheitsproblemen kennen und die grundlegenden Strategien verstehen, mit denen Sie diese verringern können.

XSLT-Erweiterungen

Zwei häufig verwendete XSLT-Erweiterungen sind Stylesheet-Skriptobjekte und Erweiterungsobjekte. Diese Erweiterungen ermöglichen dem XSLT-Prozessor das Ausführen von Code.

  • Mit Erweiterungsobjekten werden XSL-Transformationen Programmierfunktionen hinzugefügt.

  • Skripts können mithilfe des msxsl:script-Erweiterungselements in das Stylesheet eingebettet werden.

Erweiterungsobjekte

Erweiterungsobjekte werden mithilfe der AddExtensionObject-Methode hinzugefügt. Für die Unterstützung von Erweiterungsobjekten muss der FullTrust-Berechtigungssatz festgelegt sein. Dadurch wird sichergestellt, dass beim Ausführen von Erweiterungsobjektcode keine Erhöhung der Berechtigungen auftritt. Ohne FullTrust-Berechtigung wird durch den Versuch, die AddExtensionObject-Methode aufzurufen, eine Sicherheitsausnahme ausgelöst.

Stylesheetskripts

Skripts können mithilfe des msxsl:script-Erweiterungselements in ein Stylesheet eingebettet werden. Die Skriptunterstützung ist eine optionale Funktion der XslCompiledTransform-Klasse, die in der Standardeinstellung deaktiviert ist. Die Skriptunterstützung kann aktiviert werden, indem die XsltSettings.EnableScript-Eigenschaft auf true festgelegt wird und das XsltSettings-Objekt an die Load-Methode übergeben wird.

Hinweis

Skriptblöcke werden nur im .NET Framework unterstützt. In .NET Core oder .NET 5 oder höher werden sie nicht unterstützt.

Richtlinien

Aktivieren Sie die Skriptunterstützung nur, wenn das Stylesheet aus einer vertrauenswürdigen Quelle stammt. Wenn Sie die Quelle des Stylesheets nicht überprüfen können oder das Stylesheet nicht aus einer vertrauenswürdigen Quelle stammt, übergeben Sie null für das Argument der XSLT-Einstellungen.

Externe Ressourcen

Die Sprache XSLT verfügt über Funktionen wie xsl:import, xsl:include oder die document()-Funktion, in denen der Prozessor URI-Verweise auflösen muss. Die XmlResolver-Klasse wird zum Auflösen externer Ressourcen verwendet. Externe Ressourcen müssen u. U. in den folgenden zwei Fällen aufgelöst werden:

  • Beim Kompilieren eines Stylesheets wird der XmlResolver für die Auflösung von xsl:import und xsl:include verwendet.

  • Beim Ausführen der Transformation wird die XmlResolver-Funktion mithilfe des document() aufgelöst.

    Hinweis

    Die document()-Funktion ist für die XslCompiledTransform-Klasse in der Standardeinstellung deaktiviert. Diese Funktion kann aktiviert werden, indem die XsltSettings.EnableDocumentFunction-Eigenschaft auf true festgelegt wird und das XsltSettings-Objekt an die Load-Methode übergeben wird.

Die Load-Methode und die Transform-Methode enthalten Überladungen, die einen XmlResolver als eines ihrer Argumente akzeptieren. Wenn kein XmlResolver angegeben ist, wird ein Standard-XmlUrlResolver ohne Anmeldeinformationen verwendet.

Richtlinien

Aktivieren Sie die document()-Funktion nur, wenn das Stylesheet aus einer vertrauenswürdigen Quelle stammt.

In der folgenden Liste wird erläutert, wann ein XmlResolver-Objekt angegeben werden kann.

  • Wenn der XSLT-Vorgang auf eine Netzwerkressource zugreifen muss, die eine Authentifizierung erfordert, können Sie einen XmlResolver mit den notwendigen Anmeldeinformationen verwenden.

  • Wenn Sie die Ressourcen einschränken möchten, auf die der XSLT-Vorgang zugreifen kann, können Sie einen XmlSecureResolver mit den korrekt festgelegten Einstellungen verwenden. Verwenden Sie die XmlSecureResolver-Klasse, wenn Sie eine Ressource öffnen möchten, die nicht von Ihnen gesteuert wird oder die nicht vertrauenswürdig ist.

  • Wenn Sie das Verhalten anpassen möchten, können Sie eine eigene XmlResolver-Klasse implementieren und diese zum Auflösen von Ressourcen verwenden.

  • Wenn Sie sich vergewissern möchten, dass auf keine externe Ressource zugegriffen wird, können Sie für das null-Argument XmlResolver angeben.

Siehe auch