|
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
|
Traduction
Source
|
Code transparent de sécurité, niveau 2
-
Le code transparent, notamment le code qui s'exécute avec une confiance totale, peut uniquement appeler un autre code transparent ou un code critique sécurisé. Il peut uniquement exécuter les actions autorisées par le jeu d'autorisations (s'il en existe un) de confiance partielle du domaine. Le code transparent ne peut pas effectuer les opérations suivantes : -
Effectuer une Assert or élévation de privilège. -
Contenir du code non sécurisé or non vérifiable. -
Appeler directement du code critique. -
Appeler du code natif ou du code possédant l'attribut SuppressUnmanagedCodeSecurityAttribute. -
Appeler un membre qui est protégé par un LinkDemand. -
Hériter de types critiques.
De plus, les méthodes transparentes ne peuvent pas substituer de méthodes virtuelles critiques ou implémenter des méthodes d'interface critiques. -
-
Le code critique sécurisé a un niveau de confiance totale mais peut être appelé par du code transparent. Il expose une surface limitée de code de confiance totale. Les vérifications d'exactitude et de sécurité ont lieu dans le code critique sécurisé. -
Le code critique de sécurité peut appeler tout code et a un niveau de confiance totale, mais il ne peut pas être appelé par du code transparent.
[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: SecurityRules(SecurityRuleSet.Level1)]
Annotation au niveau de l'assembly
Aucun attribut : si vous ne spécifiez pas d'attributs, le runtime interprète tout le code comme étant critique de sécurité, sauf si cet état entre en violation avec une règle d'héritage (par exemple, lors de la substitution ou de l'implémentation d'une méthode d'interface ou virtuelle transparente). Dans ces cas, les méthodes sont critiques sécurisées. Lorsque aucun attribut n'est spécifié, le Common Language Runtime détermine les règles de transparence à votre place. SecurityTransparent : tout le code est transparent. L'assembly dans son ensemble ne fera rien de privilégié ou de non sécurisé. SecurityCritical : tout le code présenté par les types de cet assembly est critique ; le reste du code est transparent. Ce scénario est similaire à la non-spécification d'attributs. Toutefois, le Common Language Runtime ne détermine pas automatiquement les règles de transparence. Par exemple, si vous substituez une méthode virtuelle ou abstraite ou implémentez une méthode d'interface, par défaut, cette méthode est transparente. Vous devez annoter explicitement la méthode comme SecurityCritical ou SecuritySafeCritical ; sinon, une exception TypeLoadException est levée au moment du chargement. Cette règle s'applique également lorsque la classe de base et la classe dérivée figurent toutes deux dans le même assembly. AllowPartiallyTrustedCallers (niveau 2 uniquement) : tout le code est transparent par défaut. Toutefois, certains types et membres spécifiques peuvent avoir d'autres attributs.
SecurityTransparent | ||
SecurityCritical(SecurityCriticalScope.Everything) | ||
SecurityCritical |
Annotation de type et de membre
SecurityCritical : le type ou le membre est critique et peut être appelé uniquement par du code de confiance totale. Les méthodes introduites dans un type critique de sécurité sont critiques.
ImportantLes méthodes virtuelles et abstraites présentées dans des interfaces ou des classes de base, et substituées ou implémentées dans une classe critique de sécurité, sont transparentes par défaut. Elles doivent être identifiées comme SecuritySafeCritical ou SecurityCritical. SecuritySafeCritical : le type ou le membre est critique sécurisé. Toutefois, le type ou le membre peut être appelé à partir de code transparent (partiellement approuvé) et a les mêmes capacité que tout autre code critique. Le code doit être audité dans le cadre de la sécurité.
-
Règles pour les types : de gauche à droite, l'accès devient plus restrictif. Les types dérivés doivent être au moins aussi restrictifs que le type de base. -
Règles pour les méthodes : les méthodes dérivées ne peuvent pas changer l'accessibilité depuis la méthode de base. Pour le comportement par défaut, toutes les méthodes dérivées qui ne sont pas annotées sont Transparent. Les dérivés des types critiques lèvent qu'une exception si la méthode substituée n'est pas annotée explicitement en tant que SecurityCritical.
|
|
|
|---|---|
|
Transparent |
Transparent |
|
Transparent |
SafeCritical |
|
Transparent |
Critical |
|
SafeCritical |
SafeCritical |
|
SafeCritical |
Critical |
|
Critical |
Critical |
|
|
|
|---|---|
|
SafeCritical |
Transparent |
|
Critical |
Transparent |
|
Critical |
SafeCritical |
|
|
|
|---|---|
|
Transparent |
Transparent |
|
Transparent |
SafeCritical |
|
SafeCritical |
Transparent |
|
SafeCritical |
SafeCritical |
|
Critical |
Critical |
|
|
|
|---|---|
|
Transparent |
Critical |
|
SafeCritical |
Critical |
|
Critical |
Transparent |
|
Critical |
SafeCritical |
Remarque
|
|---|
|
|
Prise en charge de LinkDemand
Réflexion
Remarque
|
|---|
|
|
Ignorer la vérification en cas de confiance totale
[assembly: SecurityRules(SecurityRuleSet.Level2, SkipVerificationInFullTrust = true)]