Partager via


XSLT et la sécurité

Le langage XSLT possède une panoplie de fonctionnalités offrant puissance et flexibilité. Il comprend de nombreuses fonctionnalités qui, tout en étant utiles, pourraient aussi être exploitées par des sources extérieures. Pour utiliser XSLT en toute sécurité, vous devez comprendre les types de risques pour la sécurité que pose l'utilisation de XSLT et les stratégies de base que vous pouvez employer pour minimiser ces risques.

Extensions XSLT

Deux extensions XSLT populaires sont les scripts de feuille de style et les objets d'extension. Ces extensions permettent au processeur XSLT d'exécuter du code.

  • Les objets d'extension ajoutent des capacités de programmation aux transformations XSL.

  • Des scripts peuvent être intégrés dans la feuille de style à l'aide de l'élément d'extension msxsl:script.

Objets d’extension

Les objets d’extension sont ajoutés avec la méthode AddExtensionObject. Le jeu d’autorisations FullTrust est requis pour la prise en charge des objets d’extension. Cela garantit qu’il n’y a pas d’élévation d’autorisations lors de l’exécution du code de l’objet d’extension. Une tentative d'appel de la méthode AddExtensionObject sans autorisation FullTrust produit une exception de sécurité.

Scripts de feuille de style

Des scripts peuvent être intégrés dans une feuille de style à l’aide de l’élément d’extension msxsl:script. La prise en charge des scripts est une fonction facultative de la classe XslCompiledTransform. Elle est désactivée par défaut. Les scripts peuvent être activés en définissant la propriété XsltSettings.EnableScript sur true et en transmettant l'objet XsltSettings à la méthode Load.

Notes

Les blocs de script sont pris en charge uniquement dans .NET Framework. Ils ne sont pas pris en charge sur .NET Core, .NET 5 ou des versions ultérieures.

Consignes

N'activez les scripts que lorsque la source de la feuille de style est fiable. Si vous ne pouvez pas vérifier la source de la feuille de style ou si celle-ci ne provient pas d'une source fiable, transmettez l'argument null dans les réglages XSLT.

Ressources externes

Le langage XSLT possède des fonctions telles que xsl:import, xsl:include ou document() où le processeur doit résoudre des références URI. La classe XmlResolver permet de résoudre des ressources externes. La résolution de ressources externes peut être requise dans les deux cas suivants :

  • Lors de la compilation d'une feuille de style, l'objet XmlResolver est utilisé pour résoudre xsl:import et xsl:include.

  • Lorsque la transformation est effectuée, l'objet XmlResolver est utilisé pour résoudre la fonction document().

    Notes

    La fonction document() est désactivée par défaut dans la classe XslCompiledTransform. Cette fonctionnalité peut être activée en définissant la propriété XsltSettings.EnableDocumentFunction sur true et en transmettant l’objet XsltSettings à la méthode Load.

Les méthodes Load et Transform comprennent des surcharges qui prennent un objet XmlResolver comme l’un de leurs arguments. Si aucun XmlResolver n'est spécifié, un XmlUrlResolver par défaut sans informations d'identification est utilisé.

Consignes

N'activez la fonction document() que lorsque la source de la feuille de style est fiable.

La liste suivante décrit les cas dans lesquels vous pouvez préférer spécifier un objet XmlResolver :

  • Si le traitement XSLT doit accéder à une ressource réseau qui nécessite une authentification, vous pouvez utiliser un objet XmlResolver avec les informations d'identification nécessaires.

  • Si vous souhaitez limiter les ressources auxquelles le traitement XSLT peut accéder, vous pouvez utiliser un objet XmlSecureResolver avec toutes les autorisations correctes. La classe XmlSecureResolver doit être utilisée si vous devez ouvrir une ressource non contrôlée ou non fiable.

  • Pour personnaliser le comportement, vous pouvez implémenter votre propre classe XmlResolver et l'utiliser pour résoudre les ressources.

  • Pour vous assurer qu’aucune ressource externe n’est accessible, vous pouvez spécifier null pour l’argument XmlResolver.

Voir aussi