Condividi tramite


Creazione di attributi di sicurezza dichiarativa

Generare attributi di sicurezza dichiarativa per gli assembly dinamici e per i relativi tipi e metodi equivale da un punto di vista funzionale a scrivere il codice delle dichiarazioni .permission e .permissionset per Ilasm.exe (assembler MSIL) o ad applicare l'attributo PermissionSetAttribute nel codice sorgente per Visual Basic, C# o C++. Vi sono comunque alcune differenze tra il formato metadati utilizzato per archiviare gli attributi generati e il formato utilizzato per archiviare gli attributi compilati, a seconda della versione di .NET Framework.

Formati metadati per la sicurezza dichiarativa

Nelle revisioni apportate nel 2005 allo standard ECMA, oltre al formato XML originale, è stato introdotto un nuovo formato metadati per archiviare gli attributi di sicurezza dichiarativa. Per informazioni dettagliate, vedere la descrizione del blob PermissionSet nella tabella DeclSecurity (sezione 22.11 delle revisioni del 2005) all'interno della documentazione relativa alla Partizione II ECMA. La documentazione è disponibile online alla pagina Web di MSDN ECMA C# and Common Language Infrastructure Standards e nel sito Web di ECMA, nel documento Standard ECMA-335 - Common Language Infrastructure (CLI), (informazioni in lingua inglese).

In tutte le versioni di .NET Framework la sicurezza dichiarativa applicata tramite la reflection emit viene archiviata nel vecchio formato metadati.

Le autorizzazioni di sicurezza dichiarativa nel codice compilato utilizzando Ilasm.exe (assembler MSIL) e i compilatori di linguaggio in .NET Framework versione 2.0 vengono archiviate nel nuovo formato.

Le autorizzazioni di sicurezza dichiarativa nel codice compilato utilizzando Ilasm.exe (assembler MSIL) e i compilatori di linguaggio in .NET Framework versioni 1.0 e 1.1 vengono archiviate nel vecchio formato.

Creazione di attributi di sicurezza dichiarativa

Gli attributi di sicurezza dichiarativa possono essere generati per assembly, tipi, metodi e costruttori. Per tutti gli altri tipi di membri, la sicurezza dichiarativa viene generata per i metodi sottostanti.

Nota importanteImportante

Non è possibile generare attributi di sicurezza dichiarativa creando oggetti PermissionSetAttribute e applicandoli all'assembly dinamico, al tipo o al metodo tramite il metodo SetCustomAttribute.

  • Per generare la sicurezza dichiarativa per un assembly dinamico, creare oggetti PermissionSet distinti contenenti le autorizzazioni richieste, facoltative e rifiutate. Passare questi set di autorizzazioni all'overload appropriato del metodo DefineDynamicAssembly. Se non vi sono autorizzazioni da applicare per una categoria, specificare null per tale parametro.

    Nota importanteImportante

    Le autorizzazioni richieste, facoltative e rifiutate vengono utilizzate solo se l'assembly dinamico è stato salvato e ricaricato in memoria oppure se si utilizza un overload del metodo DefineDynamicAssembly che specifica l'evidenza e le autorizzazioni richieste e si fornisce un oggetto Evidence.Per ulteriori informazioni, vedere DefineDynamicAssembly.

  • Per generare la sicurezza dichiarativa per tipi, metodi e costruttori in un assembly dinamico, creare un oggetto PermissionSet contenente le autorizzazioni per ogni enumerazione SecurityAction da applicare. Applicare le autorizzazioni utilizzando il metodo AddDeclarativeSecurity di TypeBuilder per i tipi, il metodo AddDeclarativeSecurity di ConstructorBuilder per i costruttori e il metodo AddDeclarativeSecurity di MethodBuilder per i metodi.

    NotaNota

    La sicurezza dichiarativa non è supportata per i metodi dinamici definiti utilizzando la classe DynamicMethod.

  • Per generare la sicurezza dichiarativa per tutte le altre proprietà e tutti gli altri eventi, applicare i set di autorizzazioni desiderati al metodo o ai metodi sottostanti utilizzando il metodo AddDeclarativeSecurity di MethodBuilder. Ad esempio, per generare la sicurezza dichiarativa per una proprietà, applicare la sicurezza dichiarativa ai metodi di accesso get e set della proprietà.

Durante lo sviluppo di codice che genera assembly dinamici, è consigliabile utilizzare un overload del metodo DefineDynamicAssembly che specifichi l'evidenza e le autorizzazioni, fornire l'evidenza che l'assembly dinamico deve avere e includere SecurityPermissionFlag.SkipVerification in refusedPermissions. Rifiutando SkipVerification, è garantita la verifica del codice MSIL. Questa tecnica ha come limitazione il fatto che venga generata anche una classe SecurityException in caso di utilizzo con codice che richiede l'attendibilità totale.

Vedere anche

Riferimenti

DefineDynamicAssembly

ConstructorBuilder

TypeBuilder

MethodBuilder

PermissionSet