CA5369: Použití Třídy XmlReader pro deserializaci
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5369 |
Název | Použít XmlReader pro Deserialize |
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
Deserializace nedůvěryhodného vstupu XML s XmlSerializer.Deserialize instancí bez objektu XmlReader
může potenciálně vést k útoku na odepření služby, zpřístupnění informací a útoku typu útok na požadavek 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 verze 4.0 a novější. Další možnosti, jako Stream
je například , TextReader
a XmlSerializationReader
nelze zakázat 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ů, které by mělo 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á metodu XmlSerializer.Deserialize , a nebere XmlReader
jako parametr konstruktoru.
Jak opravit porušení
Nepoužívejte XmlSerializer.Deserialize jiné přetížení než Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents)nebo Deserialize(XmlReader, String, XmlDeserializationEvents).
Kdy potlačit upozornění
Toto upozornění můžete potlačit, pokud analyzovaný kód XML pochází 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 CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
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.CA5369.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 XmlSerializer.Deserialize není XmlReader
nebo jeho odvozená třída.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Řešení
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));