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;
}
}
}