Condividi tramite


CA5366: Usare XmlReader per DataSet Read XML

Proprietà valore
ID regola CA5366
Titolo Usa XmlReader per il codice XML di lettura del set di dati
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 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)));
    }
}