Share via


CA5371: XmlReader gebruiken voor schema-lezen

Eigenschappen Weergegeven als
Regel-id CA5371
Titel XmlReader gebruiken voor schema-lezen
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Het verwerken van niet-vertrouwde XML-invoer met XmlSchema.Read 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 niet-vertrouwde DTD- en XML-schema's kan het laden van gevaarlijke externe verwijzingen mogelijk maken. Als u een XmlReader met een beveiligde resolver of met DTD- en XML-inlineschemaverwerking uitgeschakeld, wordt dit beperkt. Deze regel detecteert code die gebruikmaakt van de XmlSchema.Read methode zonder XmlReader parameter.

Schendingen oplossen

Gebruik XmlSchema.Read(XmlReader, *) overbelastingen.

Wanneer waarschuwingen onderdrukken

U kunt deze waarschuwing mogelijk onderdrukken als de methode altijd wordt gebruikt voor het XmlSchema.Read verwerken 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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371

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.CA5371.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 XmlSchema.Read is niet XmlReader.

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(stream, validationEventHandler);
}

Oplossing

using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
    XmlSchema.Read(reader, validationEventHandler);
}