Sdílet prostřednictvím


CA5366: Použití Třídy XmlReader pro čtení XML datové sady

Vlastnost Hodnota
ID pravidla CA5366
Název Pro DataSet Read XML použijte XmlReader.
Kategorie Zabezpečení
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 9 No

Příčina

Definice typu dokumentu (DTD) definuje strukturu a právní prvky a atributy dokumentu XML. Odkazování na DTD z externího prostředku může způsobit potenciální útoky doS (DoS). Většina čtenářů nemůže zakázat zpracování DTD a omezit načítání externích odkazů s výjimkou System.Xml.XmlReader. Použití těchto dalších čtenářů k načtení XML jedním z následujících metod aktivuje toto pravidlo:

Popis pravidla

System.Data.DataSet Použití ke čtení XML s nedůvěryhodnými daty může načíst nebezpečné externí odkazy, které by měly být omezeny pomocí XmlReader zabezpečeného překladače nebo se zakázaným zpracováním DTD.

Jak opravit porušení

Použití XmlReader nebo jeho odvozené třídy ke čtení XML.

Kdy potlačit upozornění

Potlačit upozornění z tohoto pravidla při práci s důvěryhodným zdrojem dat.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA5366.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

using System.Data;
using System.IO;

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

Řešení

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