Condividi tramite


CA5369: Usare XmlReader per deserializzare

Proprietà valore
ID regola CA5369
Title Usa XmlReader per la deserializzazione
Categoria Sicurezza
La correzione causa un'interruzione o meno Non rompente
Abilitato per impostazione predefinita in .NET 10 No
Linguaggi applicabili C# e Visual Basic

Causa

La deserializzazione di input XML non attendibile, dove XmlSerializer.Deserialize è stato istanziato senza un oggetto XmlReader, può potenzialmente causare attacchi di negazione del servizio, divulgazione di informazioni e forgery delle richieste lato server. 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. Elaborazione dello schema XML inline in cui sia ProhibitDtd che ProcessInlineSchema sono impostati su false per impostazione predefinita nella versione 4.0 e successive del .NET Framework. Le altre opzioni, ad Streamesempio , TextReadere XmlSerializationReader non possono disabilitare l'elaborazione DTD.

Descrizione regola

L'elaborazione di DTD e schemi XML non attendibili può consentire il caricamento di riferimenti esterni pericolosi, che devono essere limitati sia utilizzando un sistema di risoluzione sicuro XmlReader, sia disabilitando l'elaborazione di DTD e schemi XML inline. Questa regola rileva il codice che usa il XmlSerializer.Deserialize metodo e non accetta XmlReader come parametro del costruttore.

Come correggere le violazioni

Non usare XmlSerializer.Deserialize overload diversi da Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents) o Deserialize(XmlReader, String, XmlDeserializationEvents).

Quando eliminare gli avvisi

È possibile eliminare questo avviso se il codice XML analizzato proviene 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 CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369

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.CA5369.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 XmlSerializer.Deserialize non è XmlReader né una classe derivata da esso.

using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));

Soluzione

using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));