Sdílet prostřednictvím


CA2131: Typy kritické pro zabezpečení nemusejí podporovat účast na ekvivalenci typů

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

Kategorie

Microsoft.Security

Narušující změna

Narušující

Příčina

Typ se účastní porovnávání typu, přičemž typ samotný nebo jeho člen nebo pole je označen atributem SecurityCriticalAttribute.

Popis pravidla

Toto pravidlo je spuštěno pro všechny kritické typy nebo typy obsahující kritické metody nebo pole, které se účastní porovnávání typu.Zjistí-li modul CLR takový typ, jeho načtení za běhu se nezdaří a je vyvolána výjimka TypeLoadException.Obvykle ke spuštění tohoto pravidla dochází pouze v případě, že uživatel implementuje porovnávání typů ručně a nepřenechává porovnávání typů na nástroji tlbimp a kompilátorech.

Jak vyřešit porušení

Chcete-li opravit porušení tohoto pravidla, odstraňte atribut SecurityCritical.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje rozhraní, metodu a pole, které spustí toto pravidlo.

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

Viz také

Koncepty

Transparentní kód pro zabezpečení, úroveň 2