Läs på engelska

Dela via


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, TextReaderoch 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.

C#
#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.

ini
[*.{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.

C#
using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);

Lösning

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