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 9 | 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 XmlReader
má ProhibitDtd
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 vlastnostmiProcessInlineSchema
nastavenýmiProhibitDtd
nafalse
. - 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);
}