CA5366 : Utiliser XmlReader pour lire les données XML d’un jeu de données

Propriété Value
Identificateur de la règle CA5366
Titre Utiliser XmlReader pour lire les données XML d’un jeu de données
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Une définition de type de document (DTD) définit la structure et les éléments et attributs juridiques d’un document XML. La référence à une DTD à partir d’une ressource externe peut entraîner des attaques potentielles par déni de service (DoS). La plupart des lecteurs ne peuvent pas désactiver le traitement DTD et restreindre le chargement des références externes à l’exception de System.Xml.XmlReader. L’utilisation de ces autres lecteurs pour charger du code XML par l’une des méthodes suivantes déclenche cette règle :

Description de la règle

L’utilisation d’un System.Data.DataSet pour lire du code XML avec des données non approuvées peut charger des références externes dangereuses, qui doivent être restreintes à l’aide d’un XmlReader avec un programme de résolution sécurisé ou avec un traitement DTD désactivé.

Comment corriger les violations

Utilisez XmlReader ou ses classes dérivées pour lire du code XML.

Quand supprimer les avertissements

Supprimez un avertissement de cette règle lors du traitement d’une source de données approuvé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 CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366

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.CA5366.severity = none

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

Exemples de pseudo-code

Violation

using System.Data;
using System.IO;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
    }
}

Solution

using System.Data;
using System.IO;
using System.Xml;

public class ExampleClass
{
    public void ExampleMethod()
    {
        new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
    }
}