CA3077 : Traitement non sécurisé dans la conception d’API, le document XML et le lecteur de texte XML

Propriété Value
Identificateur de la règle CA3077
Titre Traitement non sécurisé dans la conception d’API, le document XML et le lecteur de texte XML
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Lors de la conception d’une API dérivée de XMLDocument et XMLTextReader, tenez compte de DtdProcessing. L’utilisation d’instances de DTDProcessing non sécurisées lors de la référence ou la résolution de sources d’entités externes ou la définition de valeurs non sécurisées dans le code XML peut aboutir à la divulgation d’informations.

Description de la règle

Une définition de type de document (DTD) est l’une des deux façons pour un analyseur XML de déterminer la validité d’un document, comme défini par la recommandation du World Wide Web Consortium (W3C) sur le langage XML (Extensible Markup Language) 1.0. Cette règle recherche les propriétés et instances où les données non fiables sont acceptées pour informer les développeurs de menaces de Information Disclosure éventuelles, qui peuvent entraîner des attaques par déni de service . Cette règle se déclenche quand :

  • Les classes XmlDocument ou XmlTextReader utilisent les valeurs du programme de résolution par défaut pour le traitement DTD.

  • Aucun constructeur n’est défini pour les classes dérivées XmlDocument ou XmlTextReader, ou aucune valeur sécurisée n’est utilisée pour XmlResolver.

Comment corriger les violations

  • Interceptez et traitez toutes les exceptions XmlTextReader  correctement pour éviter la divulgation d’informations relatives au chemin.

  • Utilisez XmlSecureResolver au lieu de XmlResolver pour limiter les ressources auxquelles  XmlTextReader  peut accéder.

Quand supprimer les avertissements

Sauf si vous êtes sûr que l’entrée provient d’une source fiable, ne supprimez aucune règle de cet avertissement.

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

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

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

Exemples de pseudo-code

Violation

using System;
using System.Xml;

namespace TestNamespace
{
    class TestClass : XmlDocument
    {
        public TestClass () {} // warn
    }

    class TestClass2 : XmlTextReader
    {
        public TestClass2() // warn
        {
        }
    }
}

Solution

using System;
using System.Xml;

namespace TestNamespace
{
    class TestClass : XmlDocument
    {
        public TestClass ()
        {
            XmlResolver = null;
        }
    }

    class TestClass2 : XmlTextReader
    {
        public TestClass2()
        {
               XmlResolver = null;
        }
    }
}