CA5371: Použití Třídy XmlReader pro čtení schématu

Vlastnost Hodnota
ID pravidla CA5371
Název Použít XmlReader pro čtení schématu
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

Zpracování nedůvěryhodného vstupu XML s XmlSchema.Read instancí bez objektu XmlReader může potenciálně vést k útoku na odepření služby, zpřístupnění informací a útoků na požadavek 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í nedůvěryhodných schémat DTD a XML může povolit načítání nebezpečných externích odkazů. XmlReader Použití se zabezpečeným překladačem nebo se zakázaným zpracováním vloženého schématu DTD a XML to omezuje. Toto pravidlo detekuje kód, který používá metodu XmlSchema.Read bez XmlReader parametru.

Jak opravit porušení

Použijte XmlSchema.Read(XmlReader, *) přetížení.

Kdy potlačit upozornění

Toto upozornění můžete potenciálně potlačit, pokud XmlSchema.Read se metoda vždy používá ke zpracování XML pocházejícího z důvěryhodného zdroje, a proto nelze manipulovat s.

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

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.CA5371.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 XmlSchema.Read není XmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Řešení

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}