CA3077: Elaborazione non sicura in progettazione API, documenti XML e lettori di testo XML
Proprietà | valore |
---|---|
ID regola | CA3077 |
Title | Elaborazione non sicura in progettazione API, documenti XML e lettori di testo XML |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Quando si progetta un'API derivata da XMLDocument e XMLTextReader, tenere presente DtdProcessing. Se si usano istanze di DTDProcessing non protette per fare riferimento o risolvere origini di entità esterne oppure per impostare valori non protetti nel codice XML, si può causare la divulgazione di informazioni.
Descrizione regola
La definizione DTD (Document Type Definition) rappresenta uno dei due modi in cui un parser XML può determinare la validità di un documento, come definito dalla raccomandazione W3C (World Wide Web Consortium) Extensible Markup Language (XML) 1.0. Questa regola cerca le proprietà e le istanze in cui vengono accettati i dati non attendibili per avvisare gli sviluppatori delle minacce potenziali di Information Disclosure , che possono causare attacchi Denial of Service (DoS) . Questa regola viene attivata quando:
XmlDocument Le classi o XmlTextReader usano valori resolver predefiniti per l'elaborazione DTD .
Non è definito alcun costruttore per le classi derivate XmlDocument o XmlTextReader oppure non sono usati valori sicuri per XmlResolver.
Come correggere le violazioni
Intercettare ed elaborare correttamente tutte le eccezioni XmlTextReader per evitare la divulgazione di informazioni sul percorso.
Usare XmlSecureResolveranziché XmlResolver per limitare le risorse a cui XmlTextReader può accedere.
Quando eliminare gli avvisi
A meno che non si abbia la certezza che l'input provenga da un'origine attendibile, non escludere una regola da questo avviso.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA3077
// The code that's violating the rule is on this line.
#pragma warning restore CA3077
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA3077.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass () {} // warn
}
class TestClass2 : XmlTextReader
{
public TestClass2() // warn
{
}
}
}
Soluzione
using System;
using System.Xml;
namespace TestNamespace
{
class TestClass : XmlDocument
{
public TestClass ()
{
XmlResolver = null;
}
}
class TestClass2 : XmlTextReader
{
public TestClass2()
{
XmlResolver = null;
}
}
}