Introduzione alla protezione dall'accesso di codice
Aggiornamento: novembre 2007
La protezione dall'accesso di codice è un meccanismo che consente di limitare l'accesso del codice alle risorse e alle operazioni protette. Grazie alla protezione dall'accesso di codice fornita in .NET Framework vengono svolte le seguenti funzioni:
Definizione di autorizzazioni e set di autorizzazioni che rappresentano il diritto di accedere a varie risorse di sistema.
Possibilità per gli amministratori di configurare criteri di protezione associando set di autorizzazioni a gruppi di codice.
Possibilità di richiedere durante l'esecuzione le autorizzazioni necessarie per l'esecuzione del codice, oltre a quelle che potrebbero migliorare il funzionamento, e di specificare le autorizzazioni che invece non devono essere mai concesse al codice.
Concessione di autorizzazioni a ogni assembly caricato, in base alle autorizzazioni richieste dal codice e alle operazioni autorizzate dai criteri di protezione.
Possibilità di esigere dai chiamanti del codice il possesso di permessi specifici.
Possibilità di esigere dai chiamanti del codice il possesso di una firma digitale, in modo che solo i chiamanti appartenenti a un'organizzazione o a un sito particolare siano autorizzati a chiamare il codice protetto.
Applicazione di restrizioni sul codice in fase di esecuzione confrontando le autorizzazioni concesse a ogni chiamante dello stack di chiamate con le autorizzazioni effettivamente necessarie.
Per stabilire se il codice sia autorizzato o meno ad accedere a una risorsa o a eseguire un'operazione, viene elaborato lo stack di chiamate e le autorizzazioni concesse a ogni chiamante vengono confrontate con le autorizzazioni pretese. Se almeno uno dei chiamanti compresi nello stack di chiamate non dispone delle autorizzazioni pretese, viene generata un'eccezione di protezione e l'accesso viene negato. L'elaborazione dello stack di chiamate ha lo scopo di impedire attacchi in cui codice scarsamente attendibile chiama codice altamente attendibile e lo utilizza per eseguire azioni non autorizzate. La pretesa di autorizzazioni di tutti i chiamanti in fase di esecuzione influisce sulle prestazioni, ma è fondamentale per proteggere il codice dagli attacchi eseguiti mediante codice scarsamente attendibile. Per ottimizzare le prestazioni, è possibile fare in modo che vengano eseguite minori elaborazioni dello stack. Sarà tuttavia necessario evitare che tale operazione riduca la protezione del sistema.
Nella seguente figura viene illustrata l'elaborazione dello stack che si ottiene quando un metodo nell'assembly A4 richiede che i suoi chiamanti dispongano dell'autorizzazione P.
Elaborazione dello stack di protezione
Un utilizzo tipico della protezione dall'accesso di codice riguarda i casi in cui tramite un'applicazione viene eseguito il download di un controllo dal sito Web host in una rete Intranet locale direttamente nel client in modo che l'utente possa immettere i dati. Il controllo viene creato mediante una libreria di classi installata nel sistema. Di seguito sono elencate alcune delle possibilità di utilizzo della protezione dall'accesso di codice in questo scenario:
Prima del caricamento, un amministratore può configurare criteri di protezione in cui sia specificato che il codice dispone di autorizzazioni particolari, superiori a quelle di solito garantite per il codice scaricato dalla rete Intranet locale, se tale codice dispone di una firma digitale specifica. Per impostazione predefinita, il set di autorizzazioni denominato LocalIntranet è associato a tutto il codice scaricato dalla rete Intranet locale.
In fase di caricamento, al controllo viene concesso un numero di autorizzazioni non superiore a quello delle autorizzazioni associate al set denominato LocalIntranet, a meno che il controllo non sia contrassegnato con una firma digitale attendibile. In questo caso al controllo vengono concesse le autorizzazioni associate al set di autorizzazioni LocalIntranet ed eventuali autorizzazioni aggiuntive, in virtù della presenza della firma digitale.
In fase di esecuzione, quando un chiamante (in questo caso il controllo ospitato) accede a una libreria che espone risorse protette o che chiama codice non gestito, tale libreria consente di generare una pretesa di protezione, in seguito alla quale viene eseguito un controllo delle autorizzazioni possedute dai chiamanti per verificare la presenza delle autorizzazioni appropriate. Mediante questi controlli di protezione è possibile impedire l'esecuzione di azioni non autorizzate sui computer client da parte del controllo.