Condividi tramite


Linee guida sulla sicurezza di System.Xml

Nelle sezioni seguenti vengono fornite le linee guida generali che possono essere utilizzate per proteggere le applicazioni System.Xml.

NotaNota

I componenti System.Xml utilizzano il sistema di sicurezza di .NET Framework.In questo argomento viene fatto riferimento solo ai problemi di sicurezza gestiti in modo specifico dalle classi XML.Per ulteriori informazioni, vedere Sicurezza in .NET Framework.

Problemi relativi alla sicurezza

I problemi relativi alla sicurezza possono essere suddivisi in tre categorie generali.

Accesso esterno

Diverse tecnologie XML consentono di recuperare altri documenti durante l'elaborazione.Ad esempio, una DTD (Document Type Definition) si può trovare nel documento analizzato.La DTD può anche risiedere in un documento esterno a cui fa riferimento il documento analizzato.Le tecnologie XSD (XML Schema Definition Language) e XSLT consentono inoltre di includere informazioni da altri file.Le risorse esterne possono presentare alcuni problemi relativi alla sicurezza:

  • Come garantire che l'applicazione recuperi i file solo da siti attendibili.Ad esempio, se in un documento XML è presente un riferimento a un file di Internet, è necessario stabilire se consentire o meno all'applicazione di recuperare il file.

  • Se si recupera un file, come assicurarsi che il file non contenga dati dannosi.

Denial of Service (Negazione del servizio)

Poiché i documenti XML possono contenere riferimenti ad altri file, è difficile determinare quanta capacità di elaborazione sia necessaria per analizzare un documento XML.Ad esempio, i documenti XML possono includere una DTD.Se la DTD contiene entità nidificate o modelli di contenuto complesso, potrebbe essere necessaria una quantità eccessiva di tempo per analizzare il documento.

Gli scenari seguenti sono considerati meno vulnerabili agli attacchi di tipo Denial of Service in quanto le classi System.Xml forniscono un sistema di protezione da tali attacchi.Per ulteriori informazioni sui tipi di problemi di sicurezza che possono verificarsi quando si lavora con i componenti System.Xml e sulle possibili soluzioni per tenere sotto controllo tali minacce, vedere Considerazione sulla sicurezza di System.Xml.

  • Analisi dei dati XML di tipo text.

  • Analisi dei dati XML binari se i dati XML binari sono stati generati da Microsoft SQL Server 2005.

  • Scrittura di documenti e frammenti XML da origini dati nel file system, flussi, un tipo TextWriter o un tipo StringBuilder.

  • Caricamento di documenti nell'oggetto DOM (Document Object Model) se si sta utilizzando un oggetto XmlReader e DtdProcessing impostato su Prohibit.

  • Esplorazione dell'oggetto DOM.

Gli scenari seguenti non sono consigliabili se ci si occupa di problemi relativi agli attacchi di tipo Denial of Service o se si lavora in un ambiente non attendibile.

  • Elaborazione della DTD.

  • Elaborazione dello schema.Ciò include l'aggiunta di uno schema non attendibile alla raccolta di schemi, la compilazione di uno schema non attendibile e la convalida tramite uno schema non attendibile.

  • Elaborazione XSLT.

  • Analisi di un qualsiasi flusso arbitrario di dati XML binari forniti dall'utente.

  • Operazioni DOM quali la creazione di query, la modifica, lo spostamento tra le sottostrutture dei documenti e il salvataggio degli oggetti DOM.

Quando si utilizza XmlReader, è possibile limitare le dimensioni del documento che è possibile analizzare impostando la proprietà MaxCharactersInDocument.Per limitare il numero di caratteri risultanti dall'espansione di entità, impostare la proprietà MaxCharactersFromEntities.Per gli esempi relativi all'impostazione di queste proprietà, vedere gli argomenti di riferimento appropriati.

Elaborazione

Le tecnologie XSD e XSLT consentono inoltre di migliorare le prestazioni dell'elaborazione.Ad esempio, è possibile creare un XML Schema che richiede una quantità maggiore di tempo per l'elaborazione quando la valutazione riguarda un documento relativamente breve.È inoltre possibile incorporare blocchi di script in un foglio di stile XSLT.Entrambi i casi comportano una minaccia potenziale alla sicurezza dell'applicazione.

Prevenzioni contro i problemi di sicurezza

Nelle sezioni seguenti vengono illustrate le prevenzioni contro i problemi sorti nel paragrafo Problemi relativi alla sicurezza riportato in precedenza.

Risorse esterne

La classe XmlUrlResolver corrisponde al sistema di risoluzione predefinito per tutte le classi dello spazio dei nomi System.Xml.Viene utilizzata per caricare i documenti XML e per risolvere le risorse esterne, ad esempio DTD o schemi, e importare o includere le direttive.

Le API consentono di ignorare tutto ciò specificando l'oggetto XmlResolver da utilizzare.Utilizzare la classe XmlSecureResolver se è necessario aprire una risorsa fuori controllo o non attendibile.Il tipo XmlSecureResolver include un tipo XmlResolver e consente di limitare le risorse a cui ha accesso il tipo XmlResolver sottostante.

Elaborazione DTD

Non abilitare l'elaborazione della DTD se ci si occupa di problemi relativi ad attacchi Denial of Service o se si gestiscono origini non attendibili.L'elaborazione della DTD è disabilitata per impostazione predefinita su oggetti XmlReader creati dal metodo Create.

NotaNota

L'oggetto XmlTextReader consente l'elaborazione della DTD per impostazione predefinita.Utilizzare la proprietà XmlTextReader.DtdProcessing per disabilitare questa funzione.

Se l'elaborazione della DTD è attivata, è possibile utilizzare il tipo XmlSecureResolver per limitare le risorse a cui il tipo XmlReader può accedere.È anche possibile progettare l'applicazione in modo da specificare vincoli di memoria e di tempo per l'elaborazione XML.Ad esempio, configurare i limiti di timeout nell'applicazione ASP.NET.

Elaborazione XSLT

Quando si crea un'applicazione in cui viene utilizzata la classe XslCompiledTransform, è necessario conoscere i seguenti elementi e le relative implicazioni:

  • Gli script XSLT sono disattivati per impostazione predefinita.Lo script con XSLT deve essere abilitato solo se è necessario il supporto per gli script e solo all'interno di un ambiente completamente attendibile.

  • La funzionalità XSLT document() è disattivata per impostazione predefinita.Se si abilita la funzione document(), limitare le risorse a cui è possibile accedere passando un oggetto XmlSecureResolver al metodo Transform.

  • Gli oggetti di estensione sono abilitati per impostazione predefinita.Se un oggetto XsltArgumentList contenente oggetti di estensione viene passato al metodo Transform, vengono utilizzati gli oggetti di estensione.

  • Nei fogli di stile XSLT possono essere inclusi riferimenti ad altri file e a blocchi di script incorporati.Un utente malintenzionato può sfruttare questa situazione fornendo dati o fogli di stile che, quando eseguiti, possono determinare l'elaborazione continua da parte del sistema finché le risorse del computer diventeranno insufficienti.

  • Le applicazioni XSLT che vengono eseguite in un ambiente con attendibilità mista potrebbero consentire lo spoofing del foglio di stile.Ad esempio, un utente malintenzionato può caricare un oggetto con un foglio di stile dannoso e trasferirlo a un altro utente che in un secondo momento chiama il metodo Transform ed esegue la trasformazione.

I problemi relativi alla sicurezza possono essere limitati non attivando gli script o la funzionalità document(), a meno che il foglio di stile non provenga da un'origine attendibile, e non accettando gli oggetti XslCompiledTransform, i fogli di stile XSLT o i dati di origine XML da un'origine non attendibile.

Gestione delle eccezioni

Le eccezioni generate dai componenti di livello inferiore possono rivelare informazioni sui percorsi che non si desidera siano esposti all'applicazione.Le applicazioni devono intercettare le eccezioni ed elaborarle in modo adeguato.

Utilizzo di XmlTextWriter

Quando si passa l'oggetto XmlTextWriter a un'altra applicazione, il flusso sottostante è esposto all'applicazione.Se si deve passare l'oggetto XmlTextWriter a un'applicazione con attendibilità parziale, è invece necessario utilizzare un oggetto XmlWriter creato dal metodo Create.

Vedere anche

Attività

Procedura: utilizzare la classe XmlSecureResolver

Altre risorse

Sicurezza e applicazioni System.Xml