CA2130 : Les constantes critiques de sécurité doivent être transparentes
TypeName |
ConstantsShouldBeTransparent |
CheckId |
CA2130 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Un champ constant ou un membre d'énumération est marqué avec le SecurityCriticalAttribute.
Description de la règle
La mise en application de la transparence n'est pas effectuée pour les valeurs de constante car les compilateurs alignent les valeurs de constante afin qu'aucune recherche ne soit requise au moment de l'exécution. Les champs constants doivent être transparents de sécurité (security-transparent) afin que les relecteurs de code ne supposent pas que le code transparent ne peut pas accéder à la constante.
Comment corriger les violations
Pour résoudre une violation de cette règle, supprimez l'attribut SecurityCritical du champ ou de la valeur.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
Dans les exemples suivants, la valeur enum EnumWithCriticalValues.CriticalEnumValue et la constante CriticalConstant déclenchent cet avertissement. Pour résoudre les problèmes, supprimez l'attribut [SecurityCritical] pour qu'elles soient transparentes de sécurité.
using System;
using System.Security;
//[assembly: SecurityRules(SecurityRuleSet.Level2)]
//[assembly: AllowPartiallyTrustedCallers]
namespace TransparencyWarningsDemo
{
public enum EnumWithCriticalValues
{
TransparentEnumValue,
// CA2130 violation
[SecurityCritical]
CriticalEnumValue
}
public class ClassWithCriticalConstant
{
// CA2130 violation
[SecurityCritical]
public const int CriticalConstant = 21;
}
}