Partager via


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;
    }
}