CA2130: Sicherheitskritische Konstanten sollten transparent sein
TypeName |
ConstantsShouldBeTransparent |
CheckId |
CA2130 |
Kategorie |
Microsoft.Security |
Unterbrechende Änderung |
Breaking |
Ursache
Ein konstantes Feld oder ein Enumerationsmember wird mit dem SecurityCriticalAttribute-Element markiert.
Regelbeschreibung
Transparenzerzwingung wird nicht für konstante Werte erzwungen, da Compiler konstante Werte inline verwenden, damit zur Laufzeit keine Suche erforderlich ist. Konstante Felder sollten sicherheitstransparent sein, damit Codebearbeiter nicht davon ausgehen, dass dieser transparente Code nicht auf die Konstante zugreifen kann.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, entfernen Sie das SecurityCritical-Attribut aus dem Feld oder Wert.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
In den folgenden Beispielen lösen der EnumWithCriticalValues.CriticalEnumValue-Enumerationswert und die CriticalConstant-Konstante diese Warnung aus. Um die Probleme zu beheben, entfernen Sie das [SecurityCritical] Attribut, um sie sicherheitstransparent zu machen.
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;
}
}