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 8 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 XmlReaderProhibitDtd a ProcessInlineSchema vlastnost nastavena false ve výchozím nastavení v rozhraní .NET Framework verze 4.0 a novější. Další možnosti, jako Streamje například , TextReadera 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)));