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 zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Nein
Anwendbare Sprachen C# und Visual Basic

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

Beim Lesen von XML mit nicht vertrauenswürdigen Daten mithilfe eines System.Data.DataSet-Elements können gefährliche externe Verweise geladen werden. Dies sollte eingeschränkt werden, indem ein XmlReader-Element mit einem sicheren Resolver oder mit deaktivierter DTD-Verarbeitung verwendet wird.

So beheben Sie Verstöße

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

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung dieser Regel, wenn eine vertrauenswürdige Datenquelle verwendet 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 auf none in der Konfigurationsdatei 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)));
    }
}