CA5370: K ověřování čtečky použijte XmlReader

Vlastnost Hodnota
ID pravidla CA5370
Název Použijte XmlReader pro ověření čtecího zařízení
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

Ověření nedůvěryhodného vstupu XML s třídou XmlValidatingReader instancovanou bez objektu XmlReader může potenciálně vést k odepření služby, odhalení informací a útoků 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. Vložené zpracování schématu XML, jelikož XmlReader má vlastnosti ProhibitDtd a ProcessInlineSchema nastavené na false ve výchozím nastavení v rozhraní .NET Framework od verze 4.0.

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ů. Toto nebezpečné načítání může být omezeno pomocí zabezpečeného XmlReader resolveru nebo s vypnutým zpracováním DTD a vloženého XML schématu. Toto pravidlo zjistí kód, který používá XmlValidatingReader třídu bez XmlReader parametru konstruktoru.

Jak opravit porušení

  • Použijte XmlValidatingReader(XmlReader) s vlastnostmi ProhibitDtd nastavenými na ProcessInlineSchema.
  • XmlValidatingReader je považována za za zastaralou. Můžete vytvořit instanci validačního čtecího mechanismu pomocí XmlReader.Create.

Kdy potlačit upozornění

Toto upozornění můžete potenciálně potlačit, pokud XmlValidatingReader se vždy používá k ověření XML pocházejícího z důvěryhodného zdroje, a proto se s tím nedá 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 CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370

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.CA5370.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 XmlValidatingReader.XmlValidatingReader() není XmlReader.

using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
    var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}

Řešení

using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
    var obj = new XmlValidatingReader(xmlReader);
}