XSLT-Sicherheitsaspekte

Aktualisiert: November 2007

Die Sprache XSLT verfügt über eine Vielzahl an Features für eine hohe Leistungsfähigkeit und Flexibilität. Sie enthält viele Features, 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 ein optionales Feature der XslCompiledTransform-Klasse, das 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.

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 Features 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 document()-Funktion mithilfe des XmlResolver aufgelöst.

    Hinweis:

    Die document()-Funktion ist für die XslCompiledTransform-Klasse in der Standardeinstellung deaktiviert. Dieses Feature 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 XmlResolver-Argument null angeben.

Siehe auch

Konzepte

Sicherheitsaspekte für "System.Xml"

Auflösen von externen Ressourcen während der XSLT-Verarbeitung

Weitere Ressourcen

XSLT-Transformationen

Codezugriffssicherheit