CA5372: Använda XmlReader för XPathDocument

Egenskap Värde
Regel-ID CA5372
Title Använda XmlReader för XPathDocument
Kategori Säkerhet
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

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. Inbäddad XML-schemabearbetning som XmlReader har egenskaperna ProhibitDtd och ProcessInlineSchema inställda på false som standard i .NET Framework från och med version 4.0. De andra alternativen, till exempel Stream, TextReaderoch XmlSerializationReader kan inte inaktivera DTD-bearbetning.

Regelbeskrivning

Bearbetning av XML från ej betrodda data kan lägga till farliga externa referenser, som kan begränsas genom att använda en XmlReader med en säker lösare eller med DTD-bearbetning avaktiverad. 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 är inte XmlReader.

using System.IO;
using System.Xml.XPath;
...
public void TestMethod(Stream stream)
{
    var obj = new XPathDocument(stream);
}

Lösning

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
    var obj = new XPathDocument(reader);
}