CA2130 : Les constantes critiques de sécurité doivent être transparentes

Élément Valeur
ID de la règle CA2130
Category Microsoft.Security
Modification avec rupture Rupture

Cause

Un champ constant ou un membre d’énumération est marqué avec SecurityCriticalAttribute.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

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 corriger 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 d’énumération EnumWithCriticalValues.CriticalEnumValue et la constante CriticalConstant déclenchent cet avertissement. Pour résoudre les problèmes, supprimez l’attribut [SecurityCritical] pour les rendre transparents en matière 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;
    }
}