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.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA3077 |
| Titel | Onveilige verwerking in API-ontwerp, XML-document en XML-tekstlezer |
| Categorie | Beveiliging |
| Oplossing is brekend of niet-brekend | Onbreekbaar |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Wanneer u een API ontwerpt die is afgeleid van XMLDocument en XMLTextReader, moet u rekening houden met DtdProcessing. Het gebruik van onveilige DTDProcessing-exemplaren bij het verwijzen naar of oplossen van externe entiteitsbronnen of het instellen van onveilige waarden in de XML kan leiden tot openbaarmaking van informatie.
Beschrijving van regel
Een documenttypedefinitie (DTD) is een van de twee manieren waarop een XML-parser de geldigheid van een document kan bepalen, zoals gedefinieerd door het World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0. Met deze regel worden eigenschappen en instanties gezocht waarbij niet-vertrouwde gegevens worden geaccepteerd om ontwikkelaars te waarschuwen over mogelijke bedreigingen voor openbaarmaking van informatie, wat kan leiden tot DoS-aanvallen (Denial of Service). Deze regel wordt geactiveerd wanneer:
XmlDocument of XmlTextReader klassen gebruiken standaard resolver-waarden voor DTD-verwerking.
Er is geen constructor gedefinieerd voor de afgeleide klassen XmlDocument of XmlTextReader of er wordt geen beveiligde waarde gebruikt voor XmlResolver.
Hoe schendingen op te lossen
Zorg ervoor dat alle uitzonderingen van XmlTextReader correct worden afgehandeld om informatielekken te voorkomen.
Gebruik XmlSecureResolverin plaats van XmlResolver om de resources te beperken die de XmlTextReader kan openen.
Wanneer waarschuwingen onderdrukken
Tenzij u zeker weet dat de invoer afkomstig is van een vertrouwde bron, negeer dan geen regel in deze waarschuwing.
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 CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
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.CA3077.severity = none
Voor meer informatie, zie Codeanalysewaarschuwingen onderdrukken.
Voorbeelden van pseudocode
Schending
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Oplossing
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}