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