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