CA5371: Använd XmlReader för schemaläsning
Property | Värde |
---|---|
Regel-ID | CA5371 |
Title | Använda XmlReader för schemaläsning |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Bearbetning av ej betrodda XML-indata med XmlSchema.Read 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 på false som standard i .NET Framework med början i version 4.0. De andra alternativen, till exempel Stream
, TextReader
och XmlSerializationReader
kan inte inaktivera DTD-bearbetning.
Regelbeskrivning
Bearbetning av obetrodda DTD- och XML-scheman kan möjliggöra inläsning av farliga externa referenser. Om du använder en XmlReader
med en säker matchare eller med DTD- och XML-inline-schemabearbetning inaktiverad begränsas detta. Den här regeln identifierar kod som använder XmlSchema.Read metoden utan XmlReader
som en parameter.
Så här åtgärdar du överträdelser
Använd XmlSchema.Read(XmlReader, *)
överlagringar.
När du ska ignorera varningar
Du kan eventuellt utelämna den här varningen om XmlSchema.Read metoden alltid används för att bearbeta XML som 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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371
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.CA5371.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 XmlSchema.Read för är inte XmlReader
.
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(stream, validationEventHandler);
}
Lösning
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(reader, validationEventHandler);
}