CA3077: Onveilige verwerking in API-ontwerp, XML-document en XML-tekstlezer

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;
        }
    }
}