Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA5369 |
| Title | Usa XmlReader per la deserializzazione |
| Categoria | Sicurezza |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | No |
Causa
La deserializzazione dell'input XML non attendibile con XmlSerializer.Deserialize cui è stata creata un'istanza senza un XmlReader oggetto può potenzialmente causare attacchi Denial of Service, divulgazione di informazioni e richieste sul 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 di XML Schema inline con XmlReader la ProhibitDtd proprietà e ProcessInlineSchema impostata su per false impostazione predefinita in .NET Framework versione 4.0 e successive. Le altre opzioni, ad Streamesempio , TextReadere XmlSerializationReader non possono disabilitare l'elaborazione DTD.
Descrizione regola
L'elaborazione di DTD e XML Schema non attendibili può consentire il caricamento di riferimenti esterni pericolosi, che devono essere limitati tramite un XmlReader sistema di risoluzione sicuro o con l'elaborazione di DTD e XML inline schema disabilitata. 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 è o una classe derivata.
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)));