Freigeben über


CA5366: XmlReader zum Lesen von DataSet-XML verwenden

Eigenschaft Wert
Regel-ID CA5366
Titel XmlReader zum Lesen von DataSet-XML verwenden
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Eine Dokumenttyp-Definition (DTD) definiert die Struktur und die rechtlichen Elemente und Attribute eines XML-Dokuments. Das verweisen auf eine DTD von einer externen Ressource könnte mögliche DoS-Angriffe (Denial of Service) verursachen. Die meisten Reader können die DTD-Verarbeitung nicht deaktivieren und das Laden externer Verweise beschränken, mit Ausnahme von System.Xml.XmlReader. Wenn Sie diese anderen Reader zum Laden von XML mit einer der folgenden Methoden verwenden, wird diese Regel ausgelöst:

Regelbeschreibung

Durch Verwenden eines System.Data.DataSet-Elements mit nicht vertrauenswürdigen Daten können gefährliche externe Verweise geladen werden. Dies muss mithilfe eines XmlReader-Elements mit sicherem Konfliktlöser oder deaktivierter DTD-Verarbeitung eingeschränkt werden.

Behandeln von Verstößen

Verwenden Sie XmlReader oder die davon abgeleiteten Klassen zum Lesen von XML.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung aus dieser Regel, wenn eine vertrauenswürdige Datenquelle behandelt wird.

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

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Pseudocodebeispiele

Verletzung

using System.Data;
using System.IO;

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

Lösung

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