CA5372: Usare XmlReader per XPathDocument
Proprietà | valore |
---|---|
ID regola | CA5372 |
Title | Usa XmlReader per XPathDocument |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
L'uso della XPathDocument
classe creata senza un XmlReader
oggetto può potenzialmente causare attacchi Denial of Service, divulgazione di informazioni e richieste sul lato server falsi. Questi attacchi sono abilitati dall'elaborazione di DTD e XML Schema non attendibili, che consente l'inclusione di bombe XML e entità esterne dannose nel codice XML. Solo con XmlReader
è possibile disabilitare DTD. L'elaborazione di XML Schema inline come XmlReader
ha la ProhibitDtd
proprietà e ProcessInlineSchema
impostata su false per impostazione predefinita in .NET Framework a partire dalla versione 4.0. Le altre opzioni, ad Stream
esempio , TextReader
e XmlSerializationReader
non possono disabilitare l'elaborazione DTD.
Descrizione regola
L'elaborazione xml da dati non attendibili può caricare riferimenti esterni pericolosi, che possono essere limitati usando un XmlReader
oggetto con un sistema di risoluzione sicuro o con l'elaborazione DTD disabilitata. Questa regola rileva il codice che usa la XPathDocument
classe e non accetta XmlReader
come parametro del costruttore.
Come correggere le violazioni
Usare XPathDocument(XmlReader, *)
costruttori.
Quando eliminare gli avvisi
È possibile eliminare questo avviso se l'oggetto XPathDocument
viene utilizzato per elaborare un file XML proveniente da un'origine attendibile e pertanto non può essere manomesso.
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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372
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.CA5372.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
Nell'esempio di pseudo-codice seguente viene illustrato il modello rilevato da questa regola.
Il tipo del primo parametro di XPathDocument
non XmlReader
è .
using System.IO;
using System.Xml.XPath;
...
var obj = new XPathDocument(stream);
Soluzione
using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
var obj = new XPathDocument(reader);
}