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
, TextReader
et 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);
}