CA5366: Använda XmlReader för datauppsättningens läs-XML
Property | Värde |
---|---|
Regel-ID | CA5366 |
Title | Använda XmlReader för XML-läsning av datauppsättning |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
En dokumenttypsdefinition (DTD) definierar strukturen och de juridiska elementen och attributen i ett XML-dokument. Att referera till en DTD från en extern resurs kan orsaka potentiella DoS-attacker (Denial of Service). De flesta läsare kan inte inaktivera DTD-bearbetning och begränsa inläsning av externa referenser förutom System.Xml.XmlReader. Om du använder dessa andra läsare för att läsa in XML med någon av följande metoder utlöser den här regeln:
Regelbeskrivning
Om du använder en System.Data.DataSet för att läsa XML med ej betrodda data kan farliga externa referenser läsas in, vilket bör begränsas med hjälp av en XmlReader med en säker lösning eller med DTD-bearbetning inaktiverad.
Så här åtgärdar du överträdelser
Använd XmlReader eller dess härledda klasser för att läsa XML.
När du ska ignorera varningar
Ignorera en varning från den här regeln när du hanterar en betrodd datakälla.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
using System.Data;
using System.IO;
public class ExampleClass
{
public void ExampleMethod()
{
new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
}
}
Lösning
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)));
}
}