Problemi di protezione con la reflection emit
In questo argomento verranno descritti i problemi di protezione da tenere in considerazione quando si creano assembly dinamici tramite la reflection emit. In alcuni scenari sono necessarie autorizzazioni specifiche. In altri scenari è necessario stabilire autorizzazioni per il codice generato. Nella descrizione che segue il termine chiamante indica il creatore degli assembly dinamici e/o dei moduli dinamici.
Scenari che richiedono autorizzazioni specifiche
In Common Language Runtime è necessario che l'assembly da cui dipende la creazione disponga dell'autorizzazione ReflectionPermissionFlag.ReflectionEmit per richiamare alcune operazioni su oggetti AssemblyBuilder e ModuleBuilder. Dal momento che la reflection emit utilizza Reflection, è inoltre possibile che l'assembly responsabile della creazione richieda l'autorizzazione per l'utilizzo di Reflection.
Definizione di autorizzazioni per il codice generato
Un chiamante necessita delle autorizzazioni appropriate sui file per rendere persistente un assembly dinamico.
I chiamanti che dispongono dell'autorizzazione SecurityPermissionFlag.ControlEvidence possono fornire prove per il codice generato. Queste prove vengono mappate attraverso i criteri per determinare le autorizzazioni concesse.
Qualsiasi chiamante può fornire prove nulle e in questo caso l'assembly ottiene l'insieme di autorizzazioni del chiamante. Questa particolarità garantisce che il codice generato non disponga di autorizzazioni più ampie rispetto al relativo chiamante.
Quando un assembly dinamico viene reso persistente su disco, i caricamenti successivi ottengono autorizzazioni in base ai criteri associati al percorso in cui l'assembly è stato reso persistente. L'assembly pertanto viene trattato come qualsiasi altro assembly caricato da disco.
Il codice generato da chiamanti semi-trusted viene sempre verificato. In particolare il runtime verifica sempre il codice che non dispone dell'autorizzazione SecurityPermissionFlag.SkipVerification. I chiamanti completamente attendibili hanno la possibilità sia di omettere che di richiedere la verifica del codice generato.