Delen via


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