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 usate anche da origini esterne. Per usare XSLT senza problemi, è necessario comprendere i tipi di problemi di sicurezza che si possono verificare durante l'uso 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 usando l'elemento di estensione
msxsl:script
.
Oggetti estensione
Gli oggetti estensione vengono aggiunti usando 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 usando 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.
Nota
I blocchi di script sono supportati solo in .NET Framework. Non sono supportati in .NET Core o .NET 5 o versioni successive.
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 usata per risolvere risorse esterne. Può essere necessario risolvere le risorse esterne nei seguenti due casi:
Quando si compila un foglio di stile, viene usato il tipo XmlResolver per la risoluzione di
xsl:import
exsl: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 sutrue
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 usato 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 usare un tipo XmlResolver con le credenziali necessarie.
Se si desidera limitare le risorse a cui può accedere il processo XSLT, è possibile usare un XmlSecureResolver con il set di autorizzazioni corretto. Usare 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 usarla 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.