Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA5369 |
| Titel | XmlReader gebruiken voor Deserialize |
| Categorie | Beveiliging |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Het deserialiseren van niet-vertrouwde XML-invoer met XmlSerializer.Deserialize geïnstantieerd zonder een XmlReader object kan mogelijk leiden tot denial of service, openbaarmaking van informatie en server-side request forgeries. Deze aanvallen worden ingeschakeld door niet-vertrouwde DTD- en XML-schemaverwerking, waardoor XML-bommen en schadelijke externe entiteiten in de XML kunnen worden opgenomen. Alleen met XmlReader is het mogelijk om DTD uit te schakelen. Inline XML-schemaverwerking als XmlReader de ProhibitDtd- en ProcessInlineSchema-eigenschappen standaard ingesteld heeft op false in .NET Framework versie 4.0 en later. De andere opties, zoals Stream, TextReaderen XmlSerializationReader kunnen DTD-verwerking niet uitschakelen.
Beschrijving van regel
Het verwerken van niet-vertrouwde DTD- en XML-schema's kan het laden van gevaarlijke externe verwijzingen mogelijk maken. Dit moet worden beperkt door gebruik te maken van een XmlReader beveiligde resolver of met DTD en XML inline schemaverwerking uitgeschakeld. Met deze regel wordt code gedetecteerd die gebruikmaakt van de XmlSerializer.Deserialize-methode en XmlReader niet als constructorparameter neemt.
Hoe schendingen op te lossen
Gebruik geen XmlSerializer.Deserialize overbelastingen anders dan Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents) of Deserialize(XmlReader, String, XmlDeserializationEvents).
Wanneer waarschuwingen onderdrukken
U kunt deze waarschuwing mogelijk onderdrukken als de geparseerde XML afkomstig is van een vertrouwde bron en daarom niet kan worden geknoeid met.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5369.severity = none
Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.
Voorbeelden van pseudocode
Schending
Het volgende pseudocodevoorbeeld illustreert het patroon dat door deze regel is gedetecteerd.
Het type van de eerste parameter XmlSerializer.Deserialize is niet XmlReader of een afgeleide klasse daarvan.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Oplossing
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));