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.

Vedere anche

Altre risorse

Creazione di assembly e metodi dinamici