CA3077: Osäker bearbetning i API-design, XML-dokument och XML-textläsare
Property | Värde |
---|---|
Regel-ID | CA3077 |
Title | Osäker bearbetning i API-design, XML-dokument och XML-textläsare |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
När du utformar ett API som härletts från XMLDocument och XMLTextReader bör du tänka på DtdProcessing. Om du använder osäkra DTDProcessing-instanser när du refererar till eller löser externa entitetskällor eller anger osäkra värden i XML kan det leda till att information avslöjas.
Regelbeskrivning
En dokumenttypsdefinition (DTD) är ett av två sätt som en XML-parser kan fastställa giltigheten för ett dokument, enligt definitionen i World Wide Web Consortium (W3C) Extensible Markup Language (XML) 1.0. Den här regeln söker efter egenskaper och instanser där ej betrodda data accepteras för att varna utvecklare om potentiella informationsutlämnandehot, vilket kan leda till DoS-attacker (Denial of Service). Den här regeln utlöses när:
XmlDocument eller XmlTextReader klasser använder standardvärden för matchning för DTD-bearbetning .
Ingen konstruktor har definierats för xmldocument- eller XmlTextReader-härledda klasser eller så används inget säkert värde för XmlResolver.
Så här åtgärdar du överträdelser
Fånga och bearbeta alla XmlTextReader-undantag korrekt för att undvika att sökvägsinformation avslöjas .
Använd XmlSecureResolveri stället för XmlResolver för att begränsa de resurser som XmlTextReader kan komma åt.
När du ska ignorera varningar
Om du inte är säker på att indata är kända för att komma från en betrodd källa ska du inte utelämna en regel från den här varningen.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Exempel på pseudokod
Kränkning
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Lösning
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}