CA5371: Použijte XmlReader pro čtení schématu

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

Zpracování nedůvěryhodného vstupu XML s XmlSchema.Read instancí bez objektu XmlReader může potenciálně vést k útokům typu odepření služby, odhalení informací a útokům typu server-side request forgery. 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. pouze s XmlReader je možné zakázat DTD. 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 Stream, TextReader a XmlSerializationReader, nezakážou 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ů. Použití XmlReader se zabezpečeným resolverem nebo se zakázaným zpracováním vloženého schématu DTD a XML toto 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 se metoda XmlSchema.Read vždy používá ke zpracování XML pocházejícího z důvěryhodného zdroje a proto s ním 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 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);
}