Partager via


Indications de codage de System.Xml

Mise à jour : November 2007

Les sections suivantes fournissent des indications générales permettant de sécuriser les applications System.Xml.

Remarque :

Les composants System.Xml se basent sur le système de sécurité de Microsoft .NET Framework. Cette rubrique n'aborde que les problèmes de sécurité spécifiquement traités par les classes XML. Pour plus d'informations, voir Sécurité dans le .NET Framework.

Problèmes de sécurité

Les problèmes de sécurité peuvent être classés en trois catégories générales.

Accès externe

Plusieurs technologies XML permettent de récupérer d'autres documents pendant le traitement. Par exemple, une définition de type de document (DTD) peut résider dans le document en cours d'analyse. La DTD peut également résider dans un document externe référencé par le document en cours d'analyse. Le langage XSD (XML Schema Definition) et les technologies XSLT permettent également d'inclure des informations provenant d'autres fichiers. Ces ressources externes peuvent présenter quelques problèmes de sécurité :

  • Comment s'assurer que l'application ne récupère que des fichiers de sites de confiance ? Par exemple, si un document XML fait référence à un fichier provenant d'Internet, l'application doit-elle récupérer ce fichier ?

  • Si un fichier est récupéré, comment s'assurer qu'il ne contient pas de données nuisibles ?

Refus de service

Les documents XML pouvant faire référence à d'autres fichiers, il est difficile de déterminer la puissance de traitement nécessaire pour analyser un document XML. Les documents XML peuvent, par exemple, inclure une DTD. Si la DTD comporte des entités imbriquées ou des modèles de contenu complexes, l'analyse du document peut durer longtemps.

Les scénarios suivants sont considérés comme moins vulnérables aux attaques de refus de service car les classes System.Xml fournissent un moyen de protection contre ces attaques. Pour connaître les types de problèmes de sécurité pouvant survenir lors de l'utilisation des composants System.Xml et les mesures à prendre pour réduire ces menaces, voir Considérations de sécurité System.Xml.

  • Analyse de données de texte XML

  • Analyse de données XML binaires si elles ont été générées par Microsoft SQL Server 2005

  • Écriture de documents XML et de fragments provenant de sources de données dans le système de fichiers, des flux, un objet TextWriter ou StringBuilder

  • Chargement de documents dans l'objet DOM (Document Object Model) si un objet XmlReader est utilisé et si ProhibitDtd est défini sur true

  • Exploration de l'objet DOM

Les scénarios suivants ne sont pas recommandés en cas de crainte concernant les attaques de refus de service ou d'utilisation d'un environnement non fiable.

  • Traitement DTD

  • Traitement de schéma Il comprend l'ajout d'un schéma non fiable à la collection de schémas, la compilation d'un schéma non fiable et la validation à l'aide d'un schéma non fiable.

  • Traitement XSLT

  • Analyse de n'importe quel flux arbitraire de données XML binaires fournies par l'utilisateur

  • Opérations DOM telles que l'interrogation, la modification, le déplacement de sous-arborescences entre des documents et l'enregistrement d'objets DOM

Lorsque vous utilisez XmlReader, vous pouvez restreindre la taille du document pouvant être analysé en définissant la propriété MaxCharactersInDocument. Définissez la propriété MaxCharactersFromEntities pour limiter le nombre maximal de caractères résultant du développement des entités. Consultez les rubriques de référence appropriées pour obtenir des exemples de définition de ces propriétés.

Traitement

Les technologies XSD et XSLT disposent de fonctionnalités supplémentaires qui peuvent affecter les performances de traitement. Par exemple, il est possible de construire un schéma XML nécessitant un traitement relativement long lorsqu'il est évalué en fonction d'un document relativement petit. Il est également possible d'intégrer des blocs de script dans une feuille de style XSLT. Les deux cas représentent une menace de sécurité potentielle pour l'application.

Ressources externes

La classe XmlUrlResolver constitue le programme de résolution par défaut de toutes les classes dans l'espace de noms System.Xml. Elle permet de charger des documents XML, de résoudre des ressources externes (entités, DTD ou schémas) et d'importer ou d'inclure des directives.

Les API permettent de la remplacer en spécifiant l'objet XmlResolver à utiliser. Utilisez la classe XmlSecureResolver si vous devez ouvrir une ressource non contrôlée ou non fiable. L'objet XmlSecureResolver enveloppe l'objet XmlResolver et permet de limiter les ressources auxquelles l'objet XmlResolver sous-jacent a accès.

Traitement DTD

Le traitement DTD ne doit pas être activé en cas de crainte concernant les problèmes de refus de service ou d'utilisation de sources non fiables. Le traitement DTD est désactivé par défaut pour les objets XmlReader créés par la méthode Create.

Remarque :

L'objet XmlTextReader permet le traitement DTD par défaut. La propriété XmlTextReader.ProhibitDtd permet de désactiver cette fonction.

Si le traitement DTD est activé, vous pouvez utiliser l'objet XmlSecureResolver pour limiter les ressources auxquelles l'objet XmlReader peut avoir accès. Vous pouvez également concevoir l'application de sorte que le traitement XML soit limité au niveau de la mémoire et du temps. Vous pouvez, par exemple, configurer des limites de délai dans l'application ASP.NET.

Traitement XSLT

Lors de la création d'une application qui utilise la classe XslCompiledTransform, vous devez connaître les éléments suivants et leurs implications :

  • Le script XSLT est désactivé par défaut. Le script XSLT ne doit être activé que si la prise en charge des scripts est nécessaire et si vous travaillez dans un environnement totalement fiable.

  • La fonction document() XSLT est désactivée par défaut. Si vous activez la fonction document(), limitez les ressources accessibles en transmettant un objet XmlSecureResolver à la méthode Transform.

  • Les objets d'extension sont activés par défaut. Si un objet XsltArgumentList contenant des objets d'extension est transmis à la méthode Transform, ceux-ci sont utilisés.

  • Les feuilles de style XSLT peuvent inclure des références à d'autres fichiers et à des blocs de script intégrés. Un utilisateur malveillant peut exploiter cette fonction en fournissant des données ou feuilles de style qui, une fois exécutées, peuvent entraîner l'exécution du traitement jusqu'à l'épuisement des ressources de l'ordinateur.

  • Les applications XSLT fonctionnant dans un environnement fiable mixte peuvent perturber la feuille de style. Un utilisateur malveillant peut, par exemple, charger un objet avec une feuille de style nuisible et le transmettre à un autre utilisateur qui appelle ensuite la méthode Transform et exécute la transformation.

Vous pouvez réduire ces problèmes de sécurité en désactivant le script ou la fonction document() sauf si la feuille de style provient d'une source fiable et en refusant les objets XslCompiledTransform, les feuilles de style XSLT ou les données de base XML provenant d'une source non fiable.

Gestion des exceptions

Les exceptions levées par des composants de niveau inférieur peuvent divulguer des informations relatives au chemin que vous ne souhaitez pas voir se propager dans l'application. Vos applications doivent intercepter les exceptions et les traiter correctement.

Utilisation de XmlTextWriter

Lorsque vous transmettez l'objet XmlTextWriter à une autre application, le flux sous-jacent est exposé à cette application. Si vous devez transmettre XmlTextWriter à une application partiellement fiable, vous devez plutôt utiliser un objet XmlWriter créé par la méthode Create.

Voir aussi

Tâches

Procédure : utilisation de la classe XmlSecureResolver

Autres ressources

Sécurité et applications system.xml