CA5371 : Utiliser XmlReader pour la lecture de schéma

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

Cause

Le traitement d’une entrée XML non approuvée avec XmlSchema.Read instancié sans objet XmlReader peut entraîner un déni de service, une divulgation d’informations et des attaques de falsification de requête côté serveur. Ces attaques sont activées par le traitement de schéma DTD et XML non approuvé, ce qui permet d’inclure des bombes XML et des entités externes malveillantes dans le code XML. Seul XmlReader permet de désactiver DTD. La valeur par défaut des propriétés ProhibitDtd et ProcessInlineSchema, dans le traitement de schéma XML inline, comme XmlReader, est définie sur false dans .NET Framework à partir de la version 4.0. Les autres options, telles que Stream, TextReaderet XmlSerializationReader, ne peuvent pas désactiver le traitement DTD.

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. L’utilisation d’un XmlReader avec un programme de résolution sécurisé ou avec le traitement de schéma inclus DTD et XML désactivé limite cela. Cette règle détecte le code qui utilise la méthode XmlSchema.Read sans XmlReader en paramètre.

Comment corriger les violations

Utiliser des surcharges XmlSchema.Read(XmlReader, *).

Quand supprimer les avertissements

Vous pouvez potentiellement supprimer cet avertissement si la méthode XmlSchema.Read est toujours utilisée pour traiter du code XML provenant d’une source approuvée et ne pouvant donc pas être falsifiée.

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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371

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.CA5371.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 XmlSchema.Read n’est pas XmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Solution

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}