Udostępnij za pośrednictwem


Metody CA2141:Transparent nie mogą spełniać LinkDemands

TypeName

TransparentMethodsMustNotSatisfyLinkDemands

CheckId

CA2141

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Metoda przezroczysta pod względem zabezpieczeń wywołuje metodę z zestawu, która nie jest oznaczona atrybutem AllowPartiallyTrustedCallersAttribute (APTCA) lub metoda przezroczysta pod względem zabezpieczeń spełnia SecurityAction.LinkDemand dla typu lub metody.

Opis reguły

Spełnienie warunków LinkDemand jest operacją wpływającą na zabezpieczenia, co może spowodować niezamierzone podwyższenie uprawnień.Kod przejrzysty pod względem bezpieczeństwa nie może spełniać warunków LinkDemands, ponieważ nie podlega tym samym wymaganiom inspekcji zabezpieczeń co krytyczny kod bezpieczeństwa.Metody przezroczyste znajdujące się w zestawie którego reguły zabezpieczeń ustawione są na poziom 1 spowodują, że wszystkie LinkDemands, dla których spełniają warunki zostaną konwertowane na pełne zapotrzebowania w czasie wykonywania, co może spowodować problemy z wydajnością.W zestawach, których reguły zabezpieczeń ustawione są na poziom 2, metody przezroczyste nie zostaną skompilowane w kompilatorze just in time (JIT) jeśli dokonają próby spełnienia warunków LinkDemand.

W zestawach, które używają 2 poziomu zabezpieczeń, próby spełnienia warunków LinkDemand lub wywołania metody w zestawie, który nie został oznaczony jako APTCA, dokonane przez metodę przezroczystą pod względem zabezpieczeń, wywołują MethodAccessException; w zestawach poziomu 1, LinkDemand staje się pełnym zapotrzebowaniem.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy oznaczyć metodę żądającą dostępu atrybutem SecurityCriticalAttribute lub SecuritySafeCriticalAttribute lub usunąć LinkDemand z metody, do której chcemy uzyskać dostęp.

Kiedy pominąć ostrzeżenia

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

Przykład

W tym przykładzie, metoda przezroczysta próbuje wywołać metodę, która ma LinkDemand.Ta reguła zostanie zastosowana dla tego kodu.

using System;
using System.Security.Permissions;


namespace TransparencyWarningsDemo
{

    public class TransparentMethodSatisfiesLinkDemandsClass
    {
        [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
        public void LinkDemandMethod() { }


        public void TransparentMethod()
        {
            // CA2141 violation - transparent method calling a method protected with a link demand.  Any of the 
            // following fixes will work here: 
            //  1. Make TransparentMethod critical 
            //  2. Make TransparentMethod safe critical 
            //  3. Remove the LinkDemand from LinkDemandMethod  (In this case, that would be recommended anyway 
            //     since it's level 2 -- however you could imagine it in a level 1 assembly)
            LinkDemandMethod();
        }
    }
}