Condividi tramite


CA2130: Le costanti SecurityCritical devono essere Transparent

TypeName

ConstantsShouldBeTransparent

CheckId

CA2130

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un campo costante o un membro di enumerazione è contrassegnato da SecurityCriticalAttribute.

Descrizione della regola

L'imposizione della trasparenza non viene applicata ai valori costanti perché i compilatori rendono inline valori costanti in modo che non sia richiesta alcuna ricerca in fase di esecuzione. I campi costanti devono essere trasparenti per la sicurezza in modo che i revisori del codice non suppongano che il codice trasparente non possa accedere alla costante.

Come correggere le violazioni

Per correggere una violazione di questa regola, rimuovere l'attributo SecurityCritical dal campo o valore.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Negli esempi seguenti, il valore di enumerazione EnumWithCriticalValues.CriticalEnumValue e la costante CriticalConstant generano questo avviso. Per correggere i problemi, rimuovere l'attributo [SecurityCritical] per renderlo SecurityTransparent.

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