CA5370 : Utiliser XmlReader pour la validation du lecteur

Propriété Value
Identificateur de la règle CA5370
Titre Utiliser XmlReader pour la validation du lecteur
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

La validation d’une entrée XML non approuvée avec la classe XmlValidatingReader instanciée sans objet XmlReader peut potentiellement entraîner un déni de service, une divulgation d’informations et une falsification de requête côté serveur. Ces attaques sont activées par le traitement de schéma DTD et XML non approuvé, qui autorise l’inclusion de bombes XML et d’entités externes malveillantes dans le code XML. Ce n’est qu’avec XmlReader qu’il est possible de désactiver DTD. Un traitement de schéma XML inline comme XmlReader a les propriétés ProhibitDtd et ProcessInlineSchema définies sur false par défaut dans le .NET Framework à partir de la version 4.0.

Description de la règle

Le traitement de schémas DTD et XML non approuvés peut permettre le chargement de références externes dangereuses. Ce chargement dangereux peut être limité en utilisant un XmlReader avec un programme de résolution sécurisé ou en désactivant le traitement de schéma inline DTD et XML. Cette règle détecte le code qui utilise la classe XmlValidatingReader sans XmlReader comme paramètre de constructeur.

Comment corriger les violations

  • Utilisez XmlValidatingReader(XmlReader) avec les propriétés ProhibitDtd et ProcessInlineSchema définies sur false.
  • À compter de .NET Framework 2.0, XmlValidatingReader est considéré comme obsolète. Vous pouvez instancier un lecteur de validation avec XmlReader.Create.

Quand supprimer les avertissements

Vous pouvez potentiellement supprimer cet avertissement si le XmlValidatingReader est toujours utilisé pour valider le code XML provenant d’une source approuvée et ne pouvant donc pas être falsifié.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA5370.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation

L’exemple de pseudo-code suivant illustre le modèle détecté par cette règle. Le type du premier paramètre de XmlValidatingReader.XmlValidatingReader() n’est pas XmlReader.

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Solution

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}