Udostępnij za pośrednictwem


CA2130: Krytyczne stałe zabezpieczeń powinny być przezroczyste

Pozycja Wartość
Ruleid CA2130
Kategoria Microsoft.Security
Zmiana powodująca niezgodność Kluczowa

Przyczyna

Stałe pole lub element członkowski wyliczenia jest oznaczony symbolem SecurityCriticalAttribute.

Uwaga

Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.

Opis reguły

Wymuszanie przezroczystości nie jest wymuszane dla wartości stałych, ponieważ kompilatory wbudowują stałe wartości, tak aby nie było wymagane żadne wyszukiwanie w czasie wykonywania. Stałe pola powinny być przezroczyste dla zabezpieczeń, tak aby recenzenci kodu nie zakładali, że przezroczysty kod nie może uzyskać dostępu do stałej.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, usuń atrybut SecurityCritical z pola lub wartości.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

W poniższych przykładach wartość EnumWithCriticalValues.CriticalEnumValue wyliczenia i stała CriticalConstant zgłaszają to ostrzeżenie. Aby rozwiązać problemy, usuń atrybut [SecurityCritical], aby uczynić je przezroczystymi zabezpieczeniami.

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