Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA5366 |
| Název | Pro DataSet Read XML použijte XmlReader. |
| Kategorie | Zabezpečení |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
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 vést k možným útokům DoS (Denial of Service). 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
Použití System.Data.DataSet ke čtení XML s nedůvěryhodnými daty může načíst nebezpečné externí odkazy, které by měly být omezeny použitím XmlReader s bezpečným resolverem nebo s vypnutým zpracováním DTD.
Jak opravit porušení
Použijte XmlReader nebo jeho odvozené třídy k č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)));
}
}