CA3077: Onveilige verwerking in API-ontwerp, XML-document en XML-tekstlezer
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA3077 |
Titel | Onveilige verwerking in API-ontwerp, XML-document en XML-tekstlezer |
Categorie | Beveiliging |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
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.
Schendingen oplossen
Catch and process all XmlTextReader exceptions correct to avoid path information disclosure .
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, moet u geen regel van deze waarschuwing onderdrukken.
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
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
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;
}
}
}