CA3077: Unsichere Verarbeitung in API-Design, XML-Dokument und XML-Textreader.
Eigenschaft | Wert |
---|---|
Regel-ID | CA3077 |
Titel | Unsichere Verarbeitung in API-Design, XML-Dokument und XML-Textreader. |
Kategorie | Security |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | No |
Ursache
Beim Entwerfen einer von XMLDocument und XMLTextReader abgeleiteten API sollten Sie DtdProcessingberücksichtigen. Das Verwenden unsicherer DTDProcessing-Instanzen beim Verweisen auf externe Entitätsquellen bzw. bei deren Auflösung oder das Festlegen unsicherer Werte in XML-Code kann zum Offenlegen von Informationen führen.
Regelbeschreibung
Eine Document Type Definition (DTD) ist eine von zwei Methoden, mit denen ein XML-Parser die Gültigkeit eines Dokuments gemäß World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0bestimmen kann. Diese Regel sucht Eigenschaften und Instanzen, die nicht vertrauenswürdige Daten akzeptieren, um Entwickler vor potenziellen Information Disclosure -Bedrohungen zu warnen, die zu Denial-of-Service-Angriffen (DoS) führen können. Diese Regel wird in folgenden Fällen ausgelöst:
XmlDocument- oder XmlTextReader-Klassen verwenden Standard-Konfliktlöserwerte für die DTD-Verarbeitung.
Für die abgeleiteten XmlDocument- oder XmlTextReader-Klassen wurde kein Konstruktor definiert oder für XmlResolverwird kein sicherer Wert verwendet.
Behandeln von Verstößen
Alle XmlTextReader-Ausnahmen müssen ordnungsgemäß abgefangen und verarbeitet werden, um die Veröffentlichung von Pfadinformationen zu vermeiden.
Verwenden Sie XmlSecureResolver anstelle von XmlResolver, um die Ressourcen einzuschränken, auf die XmlTextReader zugreifen kann.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie eine Regel aus dieser Warnung niemals, es sei denn, Sie sind ganz sicher, dass die Eingabe von einer vertrauenswürdigen Quelle stammt.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Pseudocodebeispiele
Verletzung
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Lösung
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}