SecurityException: Richiesta di autorizzazione di tipo …non consentita.

Trovare le cause di questo problema potrebbe veramente far perdere la pazienza (e parecchio tempo). Almeno così è stato per me la prima volta che vi sono incappato. Questo post potrebbe essere di aiuto se dovesse capitare a qualcun altro.

Eseguendo una ASP.NET 2.0 web application, che ha sempre funzionato senza problemi, improvvisamente comincia a ritornare delle SecurityException e nell’EventLog vengono registrati messaggi del tipo:

 Descrizione: L'applicazione ha tentato di eseguire un'operazione non consentita dai 
        criteri di sicurezza. Per attribuire all'applicazione le autorizzazioni necessarie,
        contattare l'amministratore del sistema oppure modificare il livello di attendibilità
        dell'applicazione nel file di configurazione. 

Dettagli eccezione: System.Security.SecurityException: Richiesta di autorizzazione 
        di tipo 'System.Web.AspNetHostingPermission, [..],non soddisfatta.


----------


Description: The application attempted to perform an operation not allowed by the 
        security policy. To grant this application the required permission please contact 
        your system administrator or change the application's trust level in the 
        configuration file. 

Exception Details: System.Security.SecurityException: Request for the permission of 
        type System.Web.AspNetHostingPermission, [...], failed.

 

Dopo un po’ di troubleshooting si è scoperto quali fossero i file che bloccavano l’esecuzione.

Tali file, nelle loro proprietà, mostravano il seguente messaggio:

"This file came from another computer and might be blocked to help protect this computer"

image

Questa non è altro che un’informazione di stream che viene aggiunta ad un file, a partire da Windows XP SP2 e IE7, quando il file viene scaricato da una ‘non trusted zone’. Se questi file vengono trasferiti in un altro computer, essi non vengono eseguiti a meno che non siano esplicitamente sbloccati dall’utente con il bottone “Unblock”.

Questo rinforza la sicurezza per gli utenti di base impendo un’esecuzione inconsapevole di un file potenzialmente insicuro, e richiede la consapevolezza dell’utente per sbloccare esplicitamente il file.

D'altra parte però è facile capire che questo possa risultare noioso ad utenti più avanzati.

Nel caso in questione, alcuni dei file eseguiti dall’applicazione ASP.NET, erano stati scaricati da internet sulle macchine di sviluppo e poi copiati sui server. Per questo motivo si è incappati nel blocco del file descritto sopra e l’applicazione non riusciva a caricare tali moduli.

Un modo per risolvere il problema può senz’altro essere quello di sbloccarli manualmente andando nelle proprietà di ciascuno di essi e premendo il bottone unblock. 

Questo potrebbe risultare particolarmente noioso nel caso i file siano molti e l’operazione debba essere replicata su molte macchine.

Per risolvere il problema in un unico colpo, è possibile rimuovere le informazioni di stream aggiunte al file in modo che si perda l’informazione di provenienza (‘Untrusted Zone’).

Si può usare il tool Stream per rimuovere in massa tutte le stream dai file contenuti in una cartella.

Oppure, tramite lo stesso tool, è possibile vedere le informazioni di stream di tutti i file, per poi operare solo su quelli che contengono le informazioni indesiderate.

O ancora, si possono per esempio zippare i file in questione con WinZip, perché tali informazioni non sopravvivono alla compressione-decompressione.

Il seguente post descrive un problema simile:

http://blogs.msdn.com/gblock/archive/2006/12/19/tips-steams-zones-vista-and-blocked-files-in-ie.aspx#9392176

 

Concludo col dire che, ovviamente, una volta rimosse le informazioni di stream, l’applicazione ASP.NET ha ripreso a funzionare correttamente.

 

Ciao e alla prossima

Stefano Pronti

Senior Support Engineer

EMEA IIS and Web Developer Support Team