Share via


CA2130: Las constantes críticas para la seguridad deben ser transparentes

Elemento Valor
RuleId CA2130
Category Microsoft.Security
Cambio importante Problemático

Causa

Un campo constante o un miembro de enumeración se marca con SecurityCriticalAttribute.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

El cumplimiento de la transparencia no se exige para los valores constantes porque los compiladores alinean los valores constantes para que no se requiera ninguna búsqueda en tiempo de ejecución. Los campos constantes deberían ser transparentes en seguridad de modo que los revisores del código no supongan que el código transparente no puede tener acceso a la constante.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite el atributo SecurityCritical del campo o valor.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En los ejemplos siguientes, el valor de enumeración EnumWithCriticalValues.CriticalEnumValue y la constante CriticalConstant generan esta advertencia. Para corregir los problemas, quite el atributo [SecurityCritical] para que la seguridad sea transparente.

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