CA5370: Använd XmlReader för att validera läsare

Egenskap Värde
Regel-ID CA5370
Title Använda XmlReader för att verifiera läsare
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

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. Inline XML-schemabearbetning där XmlReader har egenskaperna ProhibitDtd och ProcessInlineSchema inställda på false som standard i .NET Framework från 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 genom att använda en XmlReader med en säker resolver eller genom att inaktivera DTD- och XML inline schema-bearbetning. 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) med ProhibitDtd och ProcessInlineSchema 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() ä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);
}