Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschappen | Weergegeven als | 
|---|---|
| Regel-id | CA5372 | 
| Titel | XmlReader gebruiken voor XPathDocument | 
| Categorie | Beveiliging | 
| Oplossing is brekend of niet-brekend | Niet-brekend | 
| Standaard ingeschakeld in .NET 9 | Nee | 
Oorzaak
Het gebruik van de XPathDocument klasse die is geïnstantieerd zonder een XmlReader object kan leiden tot denial of service, openbaarmaking van informatie en vervalsingsaanvallen 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 in .NET Framework vanaf versie 4.0. De andere opties, zoals Stream, TextReaderen XmlSerializationReader kunnen DTD-verwerking niet uitschakelen.
Beschrijving van regel
Het verwerken van XML van niet-vertrouwde gegevens kan gevaarlijke externe verwijzingen laden, die kunnen worden beperkt door gebruik te maken van een XmlReader beveiligde resolver of met DTD-verwerking uitgeschakeld. Met deze regel wordt code gedetecteerd die gebruikmaakt van de XPathDocument klasse en die niet als constructorparameter wordt gebruikt XmlReader .
Schendingen oplossen
Constructors gebruiken XPathDocument(XmlReader, *) .
Wanneer waarschuwingen onderdrukken
U kunt deze waarschuwing mogelijk onderdrukken als het object wordt gebruikt voor het XPathDocument verwerken van een XML-bestand dat 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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372
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.CA5372.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 XPathDocument is niet XmlReader.
using System.IO;
using System.Xml.XPath;
...
public void TestMethod(Stream stream)
{
    var obj = new XPathDocument(stream);
}
Oplossing
using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
    var obj = new XPathDocument(reader);
}