CA5370: XmlReader gebruiken voor het valideren van de lezer
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA5370 |
Titel | XmlReader gebruiken voor het valideren van de lezer |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Het valideren van niet-vertrouwde XML-invoer met de XmlValidatingReader
klasse die is geïnstantieerd zonder een XmlReader
object kan leiden tot denial of service, openbaarmaking van informatie en aanvraagvervalsing aan de serverzijde. Deze aanvallen worden ingeschakeld door niet-vertrouwde DTD- en XML-schemaverwerking, waardoor XML-bommen en schadelijke externe entiteiten in de XML kunnen worden opgenomen. Alleen met XmlReader
is het mogelijk om DTD uit te schakelen. Inline XML-schemaverwerking zoals XmlReader
de ProhibitDtd
eigenschap is ProcessInlineSchema
ingesteld op false
standaard in .NET Framework vanaf versie 4.0.
Beschrijving van regel
Het verwerken van niet-vertrouwde DTD- en XML-schema's kan het laden van gevaarlijke externe verwijzingen mogelijk maken. Deze gevaarlijke belasting kan worden beperkt door gebruik te maken van een XmlReader
beveiligde resolver of met DTD en XML inline schemaverwerking uitgeschakeld. Deze regel detecteert code die gebruikmaakt van de XmlValidatingReader
klasse zonder XmlReader
een constructorparameter.
Schendingen oplossen
- Gebruiken
XmlValidatingReader(XmlReader)
metProhibitDtd
enProcessInlineSchema
eigenschappen ingesteld opfalse
. - Vanaf .NET Framework 2.0 wordt
XmlValidatingReader
beschouwd als verouderd. U kunt een validatielezer instantiëren met XmlReader.Create.
Wanneer waarschuwingen onderdrukken
U kunt deze waarschuwing mogelijk onderdrukken als de xml altijd wordt gebruikt voor het XmlValidatingReader
valideren van XML die afkomstig is van een vertrouwde bron en daarom niet kan worden geknoeid met.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5370.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeelden van pseudocode
Schending
Het volgende pseudocodevoorbeeld illustreert het patroon dat door deze regel is gedetecteerd.
Het type van de eerste parameter XmlValidatingReader.XmlValidatingReader()
is niet 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);
}
Oplossing
using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
var obj = new XmlValidatingReader(xmlReader);
}