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