CA2134 : La transparence des méthodes doit rester cohérente lors de la substitution de méthodes de base
Élément | Valeur |
---|---|
ID de la règle | CA2134 |
Category | Microsoft.Security |
Modification avec rupture | Rupture |
Cause
Cette règle se déclenche lorsqu’une méthode marquée avec SecurityCriticalAttribute remplace une méthode transparente ou marquée avec SecuritySafeCriticalAttribute. La règle se déclenche également lorsqu’une méthode transparente ou marquée avec SecuritySafeCriticalAttribute remplace une méthode marquée avec SecurityCriticalAttribute.
La règle est appliquée lors de la substitution d’une méthode virtuelle ou de l’implémentation d’une interface.
Notes
Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.
Description de la règle
Cette règle se déclenche sur les tentatives de modification de l’accessibilité de sécurité d’une méthode plus haut dans la chaîne d’héritage. Par exemple, si une méthode virtuelle dans une classe de base est transparente ou critique pour la sécurité, la classe dérivée doit la remplacer par une méthode transparente ou sécurisée. À l’inverse, si la machine virtuelle est critique pour la sécurité, la classe dérivée doit la remplacer par une méthode sécurisée. La même règle s’applique à l’implémentation de méthodes d’interface.
Les règles de transparence sont appliquées lorsque le code est compilé juste-à-temps au lieu du moment de l’exécution, afin que le calcul de transparence n’ait pas d’informations de type dynamique. Par conséquent, le résultat du calcul de transparence doit être déterminé uniquement à partir des types statiques compilés par JIT, quel que soit le type dynamique.
Comment corriger les violations
Pour corriger une violation de cette règle, modifiez la transparence de la méthode qui remplace une méthode virtuelle ou qui implémente une interface pour qu’elle corresponde à la transparence de la méthode virtuelle ou d’interface.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle. Les violations de cette règle entraînent une TypeLoadException d’exécution pour les assemblys qui utilisent la transparence de niveau 2.
Exemples
Code
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public interface IInterface
{
void TransparentInterfaceMethod();
[SecurityCritical]
void CriticalInterfaceMethod();
}
public class Base
{
public virtual void TransparentVirtual() { }
[SecurityCritical]
public virtual void CriticalVirtual() { }
}
public class Derived : Base, IInterface
{
// CA2134 violation - implementing a transparent method with a critical one. This can be fixed by any of:
// 1. Making IInterface.TransparentInterfaceMethod security critical
// 2. Making Derived.TransparentInterfaceMethod transparent
// 3. Making Derived.TransparentInterfaceMethod safe critical
[SecurityCritical]
public void TransparentInterfaceMethod() { }
// CA2134 violation - implementing a critical method with a transparent one. This can be fixed by any of:
// 1. Making IInterface.CriticalInterfaceMethod transparent
// 2. Making IInterface.CriticalInterfaceMethod safe critical
// 3. Making Derived.TransparentInterfaceMethod critical
public void CriticalInterfaceMethod() { }
// CA2134 violation - overriding a transparent method with a critical one. This can be fixed by any of:
// 1. Making Base.TrasnparentVirtual critical
// 2. Making Derived.TransparentVirtual transparent
// 3. Making Derived.TransparentVirtual safe critical
[SecurityCritical]
public override void TransparentVirtual() { }
// CA2134 violation - overriding a critical method with a transparent one. This can be fixed by any of:
// 1. Making Base.CriticalVirtual transparent
// 2. Making Base.CriticalVirtual safe critical
// 3. Making Derived.CriticalVirtual critical
public override void CriticalVirtual() { }
}
}
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour