CA2140: Jawny kod nie może odwoływać się do elementów krytycznych dla zabezpieczeń
Pozycja | Wartość |
---|---|
Ruleid | CA2140 |
Kategoria | Microsoft.Security |
Zmiana powodująca niezgodność | Kluczowa |
Przyczyna
Przezroczysta metoda:
obsługuje typ wyjątku zabezpieczeń krytycznego dla zabezpieczeń
ma parametr oznaczony jako typ krytyczny dla zabezpieczeń
ma parametr ogólny z ograniczeniami krytycznymi dla zabezpieczeń
ma zmienną lokalną typu krytycznego dla zabezpieczeń
odwołuje się do typu, który jest oznaczony jako krytyczny dla zabezpieczeń
wywołuje metodę oznaczoną jako krytyczne dla zabezpieczeń
odwołuje się do pola oznaczonego jako krytyczne dla zabezpieczeń
Zwraca typ oznaczony jako krytyczny dla zabezpieczeń
Uwaga
Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.
Opis reguły
Element kodu oznaczony atrybutem SecurityCriticalAttribute ma krytyczne znaczenie dla zabezpieczeń. Przezroczysta metoda nie może użyć elementu krytycznego dla zabezpieczeń. Jeśli typ przezroczysty próbuje użyć typu krytycznego dla zabezpieczeń, TypeAccessExceptionMethodAccessException , lub FieldAccessException jest zgłaszany.
Jak naprawić naruszenia
Aby naprawić naruszenie tej reguły, wykonaj jedną z następujących czynności:
Oznacz element kodu, który używa kodu krytycznego dla zabezpieczeń z atrybutem SecurityCriticalAttribute
- lub -
SecurityCriticalAttribute Usuń atrybut z elementów kodu, które są oznaczone jako krytyczne dla zabezpieczeń, a zamiast tego oznacz je za pomocą atrybutu SecuritySafeCriticalAttribute lubSecurityTransparentAttribute.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.
Przykład
W poniższych przykładach metoda przezroczysta próbuje odwołać się do kolekcji ogólnej krytycznej pod względem zabezpieczeń, pola krytycznego pod względem zabezpieczeń i metody krytycznej dla zabezpieczeń.
using System;
using System.Security;
using System.Collections.Generic;
namespace TransparencyWarningsDemo
{
[SecurityCritical]
public class SecurityCriticalClass { }
public class TransparentMethodsReferenceCriticalCodeClass
{
[SecurityCritical]
private object m_criticalField;
[SecurityCritical]
private void CriticalMethod() { }
public void TransparentMethod()
{
// CA2140 violation - transparent method accessing a critical type. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make CriticalClass safe critical
// 4. Make CriticalClass transparent
List<SecurityCriticalClass> l = new List<SecurityCriticalClass>();
// CA2140 violation - transparent method accessing a critical field. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make m_criticalField safe critical
// 4. Make m_criticalField transparent
m_criticalField = l;
// CA2140 violation - transparent method accessing a critical method. This can be fixed by any of:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Make CriticalMethod safe critical
// 4. Make CriticalMethod transparent
CriticalMethod();
}
}
}
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla