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 false.
  • Počínaje rozhraním .NET Framework 2.0 XmlValidatingReader se považuje za zastaralé. 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);
}