Considerazioni sulla sicurezza XSLT
Il linguaggio XSLT dispone di un'ampia gamma di funzionalità che offrono notevoli prestazioni e flessibilità. Sono incluse numerose funzionalità utili che possono essere utilizzate anche da origini esterne. Per utilizzare XSLT senza problemi, è necessario comprendere i tipi di problemi di sicurezza che si possono verificare durante l'utilizzo di XSLT e le strategie di base che è possibile applicare per limitare tali rischi.
Estensioni XSLT
Due estensioni XSLT note sono gli script di fogli di stile e gli oggetti estensioni. Queste estensioni consentono al processore XSLT di eseguire il codice.
Gli oggetti estensioni consentono di aggiungere funzionalità di programmazione alle trasformazioni XSL.
Gli script possono essere incorporati nel foglio di stile utilizzando l'elemento di estensione msxsl:script.
Oggetti estensione
Gli oggetti estensione vengono aggiunti utilizzando il metodo AddExtensionObject. È richiesto il set di autorizzazioni FullTrust per supportare gli oggetti estensioni. In tal modo si assicura che non si verificherà un'elevazione delle autorizzazioni quando viene eseguito il codice dell'oggetto estensioni. Un tentativo di chiamata al metodo AddExtensionObject senza le autorizzazioni FullTrust genererà un'eccezione di sicurezza.
Script di foglio di stile
Gli script possono essere incorporati in un foglio di stile utilizzando l'elemento di estensione msxsl:script. Il supporto degli script è una funzionalità opzionale della classe XslCompiledTransform e per impostazione predefinita è disabilitata. È possibile abilitare l'inserimento di script impostando la proprietà XsltSettings.EnableScript su true e passando l'oggetto XsltSettings al metodo Load.
Linee guida
Abilitare l'inserimento di script solo se il foglio di stile proviene da un'origine attendibile. Se non è possibile verificare l'origine del foglio di stile o se il foglio di stile non deriva da un'origine attendibile, passarlo in null per l'argomento delle impostazioni XSLT.
Risorse esterne
Il linguaggio XSLT dispone di funzioni come xsl:import, xsl:include o document(), dove il processore deve risolvere riferimenti all'URI. La classe XmlResolver viene utilizzata per risolvere risorse esterne. Può essere necessario risolvere le risorse esterne nei seguenti due casi:
Quando si compila un foglio di stile, viene utilizzato il tipo XmlResolver per la risoluzione di xsl:import e xsl:include.
Quando si esegue la trasformazione, viene usato il tipo XmlResolver per risolvere la funzione document().
Nota Per impostazione predefinita, la funzione document() è disabilitata nella classe XslCompiledTransform.È possibile abilitare la funzione impostando la proprietà XsltSettings.EnableDocumentFunction su true e passando l'oggetto XsltSettings al metodo Load.
I metodi Load e Transform includono ciascuno overload che accettano un tipo XmlResolver come argomento. Se non viene specificato alcun tipo XmlResolver, viene utilizzato un tipo predefinito XmlUrlResolver senza credenziali.
Linee guida
Abilitare la funzione document() solo se il foglio di stile proviene da un'origine attendibile.
Nell'elenco seguente viene descritto quando può essere necessario specificare un oggetto XmlResolver:
Se il processo XSLT richiede l'accesso a una risorsa di rete che richiede l'autenticazione, è possibile utilizzare un tipo XmlResolver con le credenziali necessarie.
Se si desidera limitare le risorse a cui può accedere il processo XSLT, è possibile utilizzare un XmlSecureResolver con il set di autorizzazioni corretto. Utilizzare la classe XmlSecureResolver se è necessario aprire una risorsa che non si controlla o che non è considerata affidabile.
Se si desidera personalizzare il comportamento, è possibile implementare la propria classe XmlResolver e utilizzarla per risolvere le risorse.
Se si desidera assicurarsi che non venga eseguito l'accesso ad alcuna risorsa esterna, è possibile specificare null per l'argomento XmlResolver.
Vedere anche
Concetti
Considerazione sulla sicurezza di System.Xml
Risoluzione delle risorse esterne durante l'elaborazione XSLT