CA5372 : Utiliser XmlReader pour XPathDocument

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

Cause

L’utilisation de la classe instanciée XPathDocument 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é, qui autorise l’inclusion de bombes XML et d’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 xml à partir de données non approuvées peut charger des références externes dangereuses, qui peuvent être restreintes à l’aide d’un XmlReader avec un programme de résolution sécurisé ou un traitement DTD désactivé. Cette règle détecte le code qui utilise la classe XPathDocument et ne prend pas XmlReader en tant que paramètre de constructeur.

Comment corriger les violations

Utilisez des constructeurs XPathDocument(XmlReader, *).

Quand supprimer les avertissements

Vous pouvez éventuellement supprimer cet avertissement si l’objet XPathDocument est utilisé pour traiter un fichier XML provenant d’une source approuvée et ne peut 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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

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.CA5372.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 XPathDocument n’est pas XmlReader.

using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

Solution

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}