Udostępnij za pośrednictwem


CA2131: Typy krytyczne dla zabezpieczeń nie mogą brać udziału w równoważnikach typów

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Typ uczestniczy w równoważeniu typu i albo sam typ, albo element członkowski, albo pole, albo typ jest oznaczony atrybutem SecurityCriticalAttribute.

Opis reguły

Ta reguła jest uruchamiana na wszystkich typach krytycznych lub typach, które zawierają metody krytyczne lub pola, które uczestniczą w równoważeniu typu.Gdy CLR wykryje taki typ, uniemożliwia jego załadowanie wywołując wyjątek TypeLoadException w czasie wykonywania.Zazwyczaj ta reguła uruchamiany tylko wtedy, gdy użytkownicy implementują równoważenie typu ręcznie, zamiast wykonać równoważenie typu polegając na tlbimp i kompilatorach.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy usunąć atrybut SecurityCritical.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

W poniższych przykładach zademonstrowano interfejs, metodę i pole, które spowodują, że ta reguła zostanie uruchomiona.

using System;
using System.Security;
using System.Runtime.InteropServices;

[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: AllowPartiallyTrustedCallers]

namespace TransparencyWarningsDemo
{

    // CA2131 error - critical type participating in equivilance
    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public interface ICriticalEquivilentInterface
    {
        void Method1();
    }

    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ITransparentEquivilentInterface")]
    public interface ITransparentEquivilentInterface
    {
        // CA2131 error - critical method in a type participating in equivilance
        [SecurityCritical]
        void CriticalMethod();
    }

    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public struct EquivilentStruct
    {
        // CA2131 error - critical field in a type participating in equivalence
        [SecurityCritical]
        public int CriticalField;
    }
}

Zobacz też

Koncepcje

Kod o przezroczystym poziomie bezpieczeństwa, poziom 2