Sdílet prostřednictvím


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 10 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. Zpracování schématu XML inline, jako XmlReader, má vlastnosti ProhibitDtd a ProcessInlineSchema nastaveny na "false" ve výchozím nastavení v .NET Framework od verze 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;
...
public void TestMethod(Stream stream)
{
    var obj = new XPathDocument(stream);
}

Řešení

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