Freigeben über


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