Udostępnij za pośrednictwem


CA2142: Jawny kod nie powinien być chroniony za pomocą LinkDemands

TypeName

TransparentMethodsShouldNotBeProtectedWithLinkDemands

CheckId

CA2142

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Przezroczysta metoda wymaga LinkDemand lub innych żądanych zabezpieczeń.

Opis reguły

Ta reguła jest uruchamiana na przezroczystych metodach wymagających LinkDemands, aby uzyskać do nich dostęp.Przezroczysty kod zabezpieczeń nie powinien być odpowiedzialny za weryfikację zabezpieczeń operacji, a zatem nie powinien wymagać uprawnień.Ponieważ metody przezroczyste powinny być neutralne pod względem zabezpieczeń, nie powinny one podejmować żadnych decyzji związanych z zabezpieczeniami.Ponadto, bezpieczny krytyczny kod, który podejmuje decyzje związane z zabezpieczeniami, nie powinien zależeć od przezroczystego kodu pod względem poprzednio dokonanej decyzji.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, usuń żądanie łączy na przezroczystej metodzie lub oznacz ją za pomocą atrybutu SecuritySafeCriticalAttribute, jeśli wykonuje kontrole zabezpieczeń, takich jak wymogi bezpieczeństwa.

Kiedy pominąć ostrzeżenia

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

Przykład

W poniższym przykładzie reguła uruchamiana jest na metodzie, ponieważ metoda jest przezroczysta i oznaczona LinkDemand PermissionSet, który zawiera LinkDemand.

using System;
using System.Security.Permissions;

namespace TransparencyWarningsDemo
{

    public class TransparentMethodsProtectedWithLinkDemandsClass
    {
        // CA2142 violation - transparent code using a LinkDemand.  This can be fixed by removing the LinkDemand 
        // from the method.
        [PermissionSet(SecurityAction.LinkDemand, Unrestricted = true)]
        public void TransparentMethod()
        {
        }
    }
}

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