Substitution des vérifications de sécurité

Une vérification de sécurité examine normalement chaque appelant dans la pile des appels pour s'assurer que l'autorisation spécifiée lui a été octroyée. Vous pouvez cependant substituer le résultat des vérifications de sécurité en appelant Assert, Deny ou PermitOnly sur un objet d'autorisation individuel ou un objet de jeu d'autorisations. En fonction des méthodes que vous appelez, vous pouvez provoquer le succès ou l'échec de la vérification de sécurité, même s'il est probable que les autorisations de tous les appelants de la pile n'aient pas été vérifiées.

Remarque importanteImportant

Dans le .NET Framework version 4, la prise en charge du runtime a été supprimée afin d'appliquer les demandes d'autorisation Deny et RevertDeny.Ces demandes ne doivent pas être utilisées dans le code qui est basé sur le .NET Framework 4 ou version ultérieure.Pour plus d'informations sur cette modification et d'autres modifications, consultez Modifications de sécurité dans le .NET Framework 4 .

Chaque fois qu'une méthode en appelle une autre, un nouveau frame est généré sur la pile des appels afin de stocker les informations concernant la méthode appelée. (L'utilisation des constructeurs et l'accès aux propriétés sont considérés comme des appels de méthodes dans ce contexte.) Chaque frame de pile comprend des informations concernant les appels de la méthode à Assert, Deny ou PermitOnly. Si un appelant utilise plusieurs Assert, Deny ou PermitOnly dans le même appel à une méthode, le runtime applique les règles de traitement suivantes, ce qui peut affecter les comportements de substitution :

  • Si, pendant le parcours de pile, le runtime découvre plusieurs substitutions du même type (c'est-à-dire deux appels à Assert) dans un frame de pile, la deuxième substitution provoque la levée d'une exception.

  • Lorsque différentes substitutions sont présentes dans le même frame de pile, le runtime traite ces substitutions dans l'ordre suivant : PermitOnly, Deny puis Assert.

Pour remplacer une substitution, appelez d'abord la méthode de rétablissement appropriée (par exemple RevertAssert) puis appliquez la nouvelle substitution.

RemarqueRemarque

Les substitutions de parcours de pile ne doivent jamais être faites dans un constructeur de classe car il n'est pas garanti que le code du constructeur de classe s'exécute à un point particulier ou dans un contexte particulier.Étant donné que l'état de la pile des appels dans un constructeur de classe n'est pas bien défini, les substitutions de parcours de pile placées dans des constructeurs peuvent produire des résultats imprévus et indésirables.

Les développeurs d'applications n'ont généralement pas besoin d'utiliser Assert, Deny ou PermitOnly et les développeurs de bibliothèques de classes et de composants ont rarement besoin de les utiliser. Toutefois, les substitutions de sécurité sont appropriées dans certaines situations décrites dans les rubriques Assert, Deny et PermitOnly.

RemarqueRemarque

Si vous effectuez une substitution (Deny, Assert ou PermitOnly), vous devez reprendre l'autorisation avant d'effectuer le même type de substitution dans le même frame de pile (c'est-à-dire la méthode).Sinon, SecurityException est levé.Par exemple, si vous refusez une autorisation, P, vous devez reprendre cette autorisation avant de pouvoir refuser une autre autorisation, Q, dans la même méthode.

Utilisez une des méthodes statiques répertoriées dans le tableau ci-dessous afin de reprendre une substitution.

Méthode

Action de la méthode

CodeAccessPermission.RevertAll

Provoque la suppression et la désactivation de toutes les précédentes substitutions pour le frame en cours.

CodeAccessPermission.RevertAssert

Provoque la suppression et la désactivation du Assert précédent pour le frame en cours.

CodeAccessPermission.RevertDeny

Provoque la suppression et la désactivation du précédent pour le frame en cours. Cette méthode est obsolète dans .NET Framework 4.

CodeAccessPermission.RevertPermitOnly

Provoque la suppression et la désactivation du précédent pour le frame en cours.

Voir aussi

Référence

Utilisation de la méthode Assert

Utilisation de la méthode Deny

Utilisation de la méthode PermitOnly

Concepts

Sécurité d'accès du code

Écriture des bibliothèques de classes sécurisées