Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Property | Värde |
|---|---|
| Regel-ID | CA5369 |
| Title | Använda XmlReader för Deserialize |
| Kategori | Säkerhet |
| Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
| Aktiverad som standard i .NET 9 | Nej |
Orsak
Att deserialisera icke betrodda XML-indata med XmlSerializer.Deserialize instansierad utan ett XmlReader objekt kan potentiellt leda till överbelastningsattacker, avslöjande av information och förfalskningsattacker på serversidan. Dessa attacker aktiveras av obetrodd DTD- och XML-schemabearbetning, vilket möjliggör inkludering av XML-bomber och skadliga externa entiteter i XML-koden. Endast med XmlReader är det möjligt att inaktivera DTD. Infogad XML-schemabearbetning som XmlReader har ProhibitDtd egenskapen och ProcessInlineSchema inställd false på som standard i .NET Framework version 4.0 och senare. De andra alternativen, till exempel Stream, TextReaderoch XmlSerializationReader kan inte inaktivera DTD-bearbetning.
Regelbeskrivning
Bearbetning av obetrodda DTD- och XML-scheman kan göra det möjligt att läsa in farliga externa referenser, som bör begränsas med hjälp av en XmlReader med en säker lösning eller med DTD- och XML-inline-schemabearbetning inaktiverad. Den här regeln identifierar kod som använder XmlSerializer.Deserialize metoden och inte tar XmlReader som en konstruktorparameter.
Så här åtgärdar du överträdelser
Använd inte XmlSerializer.Deserialize andra överlagringar än Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents)eller Deserialize(XmlReader, String, XmlDeserializationEvents).
När du ska ignorera varningar
Du kan eventuellt utelämna den här varningen om den tolkade XML-koden kommer från en betrodd källa och därför inte kan manipuleras.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA5369.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
Följande pseudokodexempel illustrerar det mönster som identifierats av den här regeln.
Typen av den första parametern XmlSerializer.Deserialize för är inte XmlReader eller en härledd klass av den.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Lösning
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));