CA3077: Nezabezpečené zpracování v návrhu rozhraní API, dokumentu XML a čtečce textu XML

Vlastnost Hodnota
ID pravidla CA3077
Název Nezabezpečené zpracování v návrhu rozhraní API, dokumentu XML a čtečce textu XML
Kategorie Zabezpečení
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Při navrhování rozhraní API odvozeného z XMLDocument a XMLTextReader mějte na paměti DtdProcessing. Použití nezabezpečených instancí DTDProcessing při odkazování nebo překladu externích zdrojů entit nebo nastavení nezabezpečených hodnot v XML může vést ke zpřístupnění informací.

Popis pravidla

Definice typu dokumentu (DTD) je jedním ze dvou způsobů, jak může analyzátor XML určit platnost dokumentu, jak je definováno konsorciem W3C (Extensible Markup Language) 1.0 ( World Wide Web Consortium). Toto pravidlo vyhledá vlastnosti a instance, ve kterých jsou nedůvěryhodná data přijata, aby vývojáři upozorňovali na potenciální hrozby zpřístupnění informací, což může vést k útokům doS (DoS ). Toto pravidlo se aktivuje v těchto případech:

  • XmlDocument nebo XmlTextReader třídy používají výchozí hodnoty překladače pro zpracování DTD .

  • Žádný konstruktor není definován pro XmlDocument nebo XmlTextReader odvozené třídy nebo není použita XmlResolveržádná zabezpečená hodnota .

Jak opravit porušení

  • Zachyťte a zpracujte všechny výjimky XmlTextReader správně, aby se zabránilo zpřístupnění informací o cestě .

  • Místo XmlResolver omezte XmlSecureResolverprostředky, ke které má XmlTextReader přístup.

Kdy potlačit upozornění

Pokud si nejste jistí, že vstup pochází z důvěryhodného zdroje, nepotlačujte pravidlo z tohoto upozornění.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

using System;
using System.Xml;

namespace TestNamespace
{
    class TestClass : XmlDocument
    {
        public TestClass () {} // warn
    }

    class TestClass2 : XmlTextReader
    {
        public TestClass2() // warn
        {
        }
    }
}

Řešení

using System;
using System.Xml;

namespace TestNamespace
{
    class TestClass : XmlDocument
    {
        public TestClass ()
        {
            XmlResolver = null;
        }
    }

    class TestClass2 : XmlTextReader
    {
        public TestClass2()
        {
               XmlResolver = null;
        }
    }
}