CA5370: Använd XmlReader för att validera läsare
Property | Värde |
---|---|
Regel-ID | CA5370 |
Title | Använda XmlReader för att verifiera läsare |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Validering av ej betrodda XML-indata med XmlValidatingReader
klassen instansierad utan ett XmlReader
objekt kan potentiellt leda till överbelastning, avslöjande av information och förfalskning av begäran 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 false
på som standard i .NET Framework med början i version 4.0.
Regelbeskrivning
Bearbetning av obetrodda DTD- och XML-scheman kan möjliggöra inläsning av farliga externa referenser. Den här farliga inläsningen kan begränsas med hjälp av en XmlReader
med en säker lösning eller med DTD- och XML-infogad schemabearbetning inaktiverad. Den här regeln identifierar kod som använder XmlValidatingReader
klassen utan XmlReader
som en konstruktorparameter.
Så här åtgärdar du överträdelser
- Använd
XmlValidatingReader(XmlReader)
medProhibitDtd
ochProcessInlineSchema
egenskaper inställda påfalse
. - Från och med .NET Framework 2.0
XmlValidatingReader
anses det vara föråldrat. Du kan instansiera en verifierande läsare med XmlReader.Create.
När du ska ignorera varningar
Du kan eventuellt utelämna den här varningen om den XmlValidatingReader
alltid används för att verifiera 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 CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370
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.CA5370.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 XmlValidatingReader.XmlValidatingReader()
för är inte XmlReader
.
using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}
Lösning
using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
var obj = new XmlValidatingReader(xmlReader);
}