Partager via


Considérations relatives à la sécurité XSLT

Le langage XSLT dispose d’un ensemble complet de fonctionnalités qui vous donnent beaucoup de puissance et de flexibilité. Il comprend de nombreuses fonctionnalités qui, bien qu’utiles, peuvent également être exploitées par des sources externes. Pour utiliser XSLT en toute sécurité, vous devez comprendre les types de problèmes de sécurité qui surviennent lors de l’utilisation de XSLT et les stratégies de base que vous pouvez utiliser pour atténuer ces risques.

Extensions XSLT

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

  • Les objets d’extension ajoutent des fonctionnalités de programmation aux transformations XSL.

  • Les scripts peuvent être incorporé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 à l’aide de la AddExtensionObject méthode. Le jeu d’autorisations FullTrust est requis pour prendre en charge les objets d’extension. Cela garantit que l’élévation des autorisations ne se produit pas lorsque le code d’objet d’extension est exécuté. Une tentative d'appel de la méthode AddExtensionObject sans autorisation FullTrust produit une exception de sécurité.

Scripts de feuille de style

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

Remarque

Les blocs de script sont pris en charge uniquement dans .NET Framework. Ils ne sont pas pris en charge sur .NET Core ou .NET 5 ou version ultérieure.

Lignes directrices

Activez les scripts uniquement lorsque la feuille de style provient d’une source approuvée. Si vous ne pouvez pas vérifier la source de la feuille de style ou si la feuille de style ne provient pas d’une source approuvée, transmettez null l’argument des paramètres XSLT.

Ressources externes

Le langage XSLT a des fonctionnalités telles que xsl:import, xsl:includeou la document() fonction, où le processeur doit résoudre les références d’URI. La XmlResolver classe est utilisée pour résoudre les ressources externes. Les ressources externes peuvent avoir besoin d’être résolues dans les deux cas suivants :

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

  • Lors de l’exécution de la transformation, le XmlResolver est utilisé pour résoudre la fonction document().

    Remarque

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

Les méthodes Load et Transform incluent chacune des surcharges qui acceptent un XmlResolver comme argument. Si un(e) XmlResolver n'est pas spécifié(e), un(e) XmlUrlResolver par défaut sans identifiants est utilisé(e).

Lignes directrices

Activez la document() fonction uniquement lorsque la feuille de style provient d’une source approuvée.

La liste suivante décrit quand vous souhaiterez peut-être spécifier un XmlResolver objet :

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

  • Si vous souhaitez restreindre les ressources auxquelles le processus XSLT peut accéder, vous pouvez utiliser un jeu d’autorisations XmlSecureResolver approprié. Utilisez la XmlSecureResolver classe si vous devez ouvrir une ressource que vous ne contrôlez pas ou qui n’est pas approuvée.

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

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

Voir aussi