CA5366: Usare XmlReader per DataSet Read XML
Proprietà | valore |
---|---|
ID regola | CA5366 |
Title | Usa XmlReader per il codice XML di lettura del set di dati |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Una definizione DTD (Document Type Definition) definisce la struttura e gli elementi legali e gli attributi di un documento XML. Il riferimento a un DTD da una risorsa esterna potrebbe causare potenziali attacchi Denial of Service (DoS). La maggior parte dei lettori non può disabilitare l'elaborazione DTD e limitare il caricamento dei riferimenti esterni ad eccezione di System.Xml.XmlReader. L'uso di questi altri lettori per caricare xml tramite uno dei metodi seguenti attiva questa regola:
Descrizione regola
L'uso di un System.Data.DataSet oggetto per leggere XML con dati non attendibili può caricare riferimenti esterni pericolosi, che devono essere limitati usando un XmlReader oggetto con un sistema di risoluzione sicuro o con l'elaborazione DTD disabilitata.
Come correggere le violazioni
Utilizzare XmlReader o le relative classi derivate per leggere XML.
Quando eliminare gli avvisi
Eliminare un avviso da questa regola quando si tratta di un'origine dati attendibile.
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 CA5366
// The code that's violating the rule is on this line.
#pragma warning restore CA5366
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.CA5366.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
using System.Data;
using System.IO;
public class ExampleClass
{
public void ExampleMethod()
{
new DataSet().ReadXml(new FileStream("xmlFilename", FileMode.Open));
}
}
Soluzione
using System.Data;
using System.IO;
using System.Xml;
public class ExampleClass
{
public void ExampleMethod()
{
new DataSet().ReadXml(new XmlTextReader(new FileStream("xmlFilename", FileMode.Open)));
}
}