Share via


CA5366: Använda XmlReader för datauppsättningens läs-XML

Property Värde
Regel-ID CA5366
Rubrik 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 8 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)));
    }
}