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