Compartir a través de


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

TypeName

ConstantsShouldBeTransparent

Identificador de comprobación

CA2130

Categoría

Microsoft.Security

Cambio problemático

Problemático

Motivo

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

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 advertencias

No suprima las advertencias de esta regla.

Ejemplo

En los ejemplos siguientes, el valor de enumeración EnumWithCriticalValues.CriticalEnumValue y la constante CriticalConstant producen esta advertencia.Para corregir los problemas, quite el atributo [SecurityCritical] para que tengan seguridad 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;
    }
}