Condividi tramite


CA2142: Il codice Transparent non deve essere protetto con LinkDemand

TypeName

TransparentMethodsShouldNotBeProtectedWithLinkDemands

CheckId

CA2142

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un metodo Trasparent richiede LinkDemand o un'altra richiesta di sicurezza.

Descrizione della regola

Questa regola funziona su metodi trasparenti di cui richiedono a LinkDemands l'accesso.Il codice SecurityTransparent non deve essere responsabile della verifica della sicurezza di un'operazione e quindi non deve richiedere autorizzazioni.Poiché si suppone che i metodi trasparenti siano neutri per la sicurezza, non devono prendere alcuna decisione relativa alla sicurezza.Inoltre, il codice SafeCritical, che prende decisioni relative alla sicurezza, non deve basarsi su codice trasparente per avere preso precedentemente tale decisione.

Come correggere le violazioni

Per correggere una violazione di questa regola, rimuovere la richiesta di collegamento sul metodo trasparente o contrassegnare il metodo con l'attributo SecuritySafeCriticalAttribute se sta eseguendo controlli di sicurezza, come ad esempio richieste di sicurezza.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio seguente, la regola si attiva sul metodo perché è trasparente ed è contrassegnato con un LinkDemand PermissionSet che contiene 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()
        {
        }
    }
}

Non escludere un avviso da questa regola.