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 8 aktiviert Nein

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