Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA5369 |
| Cím | Az XmlReader használata deszerializáláshoz |
| Kategória | Biztonság |
| A javítás kompatibilitástörő vagy nem törik | Nem törés |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
Ok
A nem megbízható XML-bemenet objektum nélküli XmlSerializer.Deserialize példányosításával XmlReader történő deszerializálása szolgáltatásmegtagadáshoz, információfeltáráshoz és kiszolgálóoldali kéréshamisítási támadásokhoz vezethet. Ezeket a támadásokat nem megbízható DTD- és XML-sémafeldolgozás teszi lehetővé, amely lehetővé teszi XML-bombák és rosszindulatú külső entitások XML-fájlba való felvételét. Csak a XmlReader DTD letiltása lehetséges. Beágyazott XML-sémafeldolgozás, ahogyan XmlReader a ProhibitDtd tulajdonság alapértelmezés ProcessInlineSchema szerint a 4.0-s és újabb verzióban van beállítva false .NET-keretrendszer. A többi lehetőség, például Streama , TextReaderés XmlSerializationReader nem tilthatja le a DTD-feldolgozást.
Szabály leírása
A nem megbízható DTD- és XML-sémák feldolgozása lehetővé teheti a veszélyes külső hivatkozások betöltését, amelyeket egy biztonságos feloldóval vagy a DTD- és XML-beágyazott sémafeldolgozás letiltásával kell korlátozni XmlReader . Ez a szabály észleli a XmlSerializer.Deserialize metódust használó és konstruktorparaméterként nem használt XmlReader kódot.
Szabálysértések kijavítása
Ne használjon XmlSerializer.Deserialize más túlterheléseket, mint Deserialize(XmlReader)a , Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents)vagy Deserialize(XmlReader, String, XmlDeserializationEvents).
Mikor kell letiltani a figyelmeztetéseket?
Ezt a figyelmeztetést akkor is letilthatja, ha az elemzett XML megbízható forrásból származik, ezért nem módosítható.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA5369.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példák pszeudokódokra
Megsértés
Az alábbi pszeudokód-minta a szabály által észlelt mintát mutatja be.
Az első paraméter XmlSerializer.Deserialize típusa nem XmlReader vagy annak származtatott osztálya.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Megoldás
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));