CA5372: Använda XmlReader för XPathDocument
Property | Värde |
---|---|
Regel-ID | CA5372 |
Title | Använda XmlReader för XPathDocument |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Att använda klassen XPathDocument
som instansieras 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 XML från ej betrodda data kan läsa in farliga externa referenser, som kan begränsas med hjälp av en XmlReader
med en säker matchare eller med DTD-bearbetning inaktiverad. Den här regeln identifierar kod som använder XPathDocument
klassen och inte tar XmlReader
som konstruktorparameter.
Så här åtgärdar du överträdelser
Använd XPathDocument(XmlReader, *)
konstruktorer.
När du ska ignorera varningar
Du kan eventuellt ignorera den XPathDocument
här varningen om objektet används för att bearbeta en XML-fil 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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372
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.CA5372.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 XPathDocument
för är inte XmlReader
.
using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);
Lösning
using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}