CA5372: Použití Třídy XmlReader pro XPathDocument

Vlastnost Hodnota
ID pravidla CA5372
Název Použít XmlReader pro XPathDocument
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 8 No

Příčina

XPathDocument Použití instance třídy bez objektu XmlReader může potenciálně vést k útoku na odepření služby, zpřístupnění informací a útok na útok typu útok na padělání požadavků na straně serveru. Tyto útoky jsou povoleny nedůvěryhodným zpracováním schématU DTD a XML, což umožňuje zahrnutí bomb XML a škodlivých externích entit do XML. DTD je možné zakázat pouze s XmlReader použitím. Inline XML schema processing as XmlReader has the ProhibitDtd and ProcessInlineSchema property set to false by default in .NET Framework starting in version 4.0. Další možnosti, jako Streamje například , TextReadera XmlSerializationReader nelze zakázat zpracování DTD.

Popis pravidla

Zpracování XML z nedůvěryhodných dat může načíst nebezpečné externí odkazy, které je možné omezit pomocí zabezpečeného XmlReader překladače nebo se zakázaným zpracováním DTD. Toto pravidlo zjistí kód, který používá XPathDocument třídu, a nebere XmlReader jako parametr konstruktoru.

Jak opravit porušení

Použijte XPathDocument(XmlReader, *) konstruktory.

Kdy potlačit upozornění

Toto upozornění můžete potlačit, pokud XPathDocument se objekt používá ke zpracování souboru XML, který pochází z důvěryhodného zdroje, a proto nelze manipulovat.

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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

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.CA5372.severity = none

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

Příklady pseudokódu

Porušení

Následující ukázka pseudokódu znázorňuje vzor zjištěný tímto pravidlem. Typ prvního parametru XPathDocument není XmlReader.

using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

Řešení

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}