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