Émission d'attributs de sécurité déclarative
L'émission d'attributs de sécurité déclarative pour les assemblys dynamiques et leurs types et méthodes équivaut, en termes de fonctionnalité, au codage des déclarations .permission et .permissionset pour l'Ilasm.exe (Assembleur MSIL) ou à l'application de l'attribut PermissionSetAttribute dans le code source pour Visual Basic, C# ou C++. Toutefois, il existe des différences entre le format de métadonnées utilisé pour stocker des attributs émis et le format utilisé pour stocker des attributs compilés, selon la version du .NET Framework.
Formats de métadonnées pour la sécurité déclarative
Un nouveau format de métadonnées permettant de stocker des attributs de sécurité déclarative a été introduit dans les révisions 2005 de la norme ECMA, en plus du format XML d'origine. Pour plus d'informations, consultez la description du blob PermissionSet dans la table DeclSecurity (section 22.11 dans les révisions 2005) de la documentation ECMA Partition II. La documentation est disponible en ligne. Consultez ECMA C# and Common Language Infrastructure Standards (en anglais) sur MSDN et Standard ECMA-335 - Common Language Infrastructure (CLI) (en anglais) sur le site Web international ECMA.
Dans toutes les versions du .NET Framework, la sécurité déclarative appliquée à l'aide de l'émission de réflexion est stockée sous l'ancien format de métadonnées.
Les autorisations de sécurité déclarative dans du code compilé à l'aide de l'Ilasm.exe (Assembleur MSIL) et des compilateurs de langage dans le .NET Framework version 2.0 sont stockées dans le nouveau format.
Les autorisations de sécurité déclarative dans le code compilé à l'aide de l'Ilasm.exe (Assembleur MSIL) et des compilateurs de langage dans les versions 1.0 et 1.1 du .NET Framework sont stockées sous l'ancien format.
Émission d'attributs de sécurité déclarative
Les attributs de sécurité déclarative peuvent être émis pour les assemblys, types, méthodes et constructeurs. Pour tous les autres types de membres, la sécurité déclarative est émise pour les méthodes sous-jacentes.
Important |
---|
Vous ne pouvez pas émettre d'attributs de sécurité déclarative en créant des objets PermissionSetAttribute et en les appliquant à l'assembly, au type ou à la méthode dynamique via l'utilisation de la méthode SetCustomAttribute. |
Afin d'émettre une sécurité déclarative pour un assembly dynamique, créez des objets PermissionSet séparés contenant les autorisations requises, facultatives et refusées. Passez ces jeux d'autorisations à la surcharge appropriée de la méthode DefineDynamicAssembly. S'il n'existe aucune autorisation à appliquer à une catégorie, spécifiez null pour ce paramètre.
Important Les autorisations requises, facultatives et refusées ne sont pas utilisées à moins que l'assembly dynamique ait été enregistré et rechargé dans la mémoire ou que vous utilisiez une surcharge de la méthode DefineDynamicAssembly qui spécifie la preuve ainsi que les autorisations demandées et que vous fournissiez un objet Evidence.Pour plus d'informations, consultez DefineDynamicAssembly.
Afin d'émettre une sécurité déclarative pour les types, méthodes et constructeurs dans un assembly dynamique, créez un objet PermissionSet contenant les autorisations pour chaque SecurityAction que vous souhaitez appliquer. Appliquez les autorisations à l'aide de la méthode AddDeclarativeSecurity de TypeBuilder pour les types, la méthode AddDeclarativeSecurity de ConstructorBuilder pour les constructeurs, et AddDeclarativeSecurity de MethodBuilder pour les méthodes.
Remarque La sécurité déclarative n'est pas prise en charge pour les méthodes dynamiques définies à l'aide de la classe DynamicMethod.
Afin d'émettre une sécurité déclarative pour tous les autres événements et propriétés, appliquez les jeux d'autorisations souhaités à la méthode ou aux méthodes sous-jacentes en utilisant la méthode AddDeclarativeSecurity de MethodBuilder. Par exemple, afin d'émettre une sécurité déclarative pour une propriété, appliquez la sécurité déclarative aux méthodes d'accesseurs get et set de la propriété.
Pendant le développement du code qui émet des assemblys dynamiques, il est recommandé d'utiliser une surcharge de la méthode DefineDynamicAssembly qui spécifie la preuve et les autorisations, de fournir la preuve que vous souhaitez attribuer à l'assembly dynamique et d'inclure SecurityPermissionFlag.SkipVerification dans refusedPermissions. Le refus de SkipVerification garantit la vérification du code MSIL. Néanmoins, cette technique a pour limite de provoquer la levée de SecurityException en cas d'utilisation avec un code nécessitant une confiance totale.