Kommentar
Å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.
| 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);
}