Sdílet prostřednictvím


CA2130: Konstanty kritické pro zabezpečení musejí být transparentní

TypeName

ConstantsShouldBeTransparent

CheckId

CA2130

Kategorie

Microsoft.Security

Narušující změna

Narušující

Příčina

Konstantní pole nebo člen výčtu je označen atributem SecurityCriticalAttribute.

Popis pravidla

Pro konstantní hodnoty není vynucována průhlednost, protože kompilátory vkládají konstantní hodnoty do kódu, aby za běhu programu nebylo zapotřebí žádné vyhledávání.Konstantní pole by měla být průhledná z pohledu zabezpečení, aby kontroloři kódu nepředpokládali, že průhledný kód nemůže ke konstantě přistoupit.

Jak vyřešit porušení

Chcete-li opravit porušení tohoto pravidla, odstraňte z pole nebo hodnoty atribut SecurityCritical.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

V následujících příklad je toto upozornění vygenerováno výčtovou hodnotou EnumWithCriticalValues.CriticalEnumValue a konstantou CriticalConstant.Opravu těchto problémů lze provést odstraněním atributu [SecurityCritical], což vede k jejich zprůhlednění z pohledu zabezpečení.

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