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

Vlastnost Hodnota
ID pravidla CA5370
Název Použít XmlReader pro ověřování čtečky
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

Ověření nedůvěryhodného XmlValidatingReader vstupu XML s instancí třídy bez objektu XmlReader může potenciálně vést k odepření služby, zpřístupnění informací a 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. Vložené zpracování schématu XML tak, jak XmlReaderProhibitDtd a ProcessInlineSchema vlastnost nastavena false ve výchozím nastavení v rozhraní .NET Framework počínaje verzí 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 překladače nebo se zakázaným zpracováním vloženého schématu DTD a XML. Toto pravidlo zjistí kód, který používá XmlValidatingReader třídu bez XmlReader parametru konstruktoru.

Jak opravit porušení

  • Používá se XmlValidatingReader(XmlReader) s vlastnostmi ProcessInlineSchema nastavenými ProhibitDtd na false.
  • Počínaje rozhraním .NET Framework 2.0 XmlValidatingReader se považuje za zastaralé. Můžete vytvořit instanci validační čtečky s 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);
}