Share via


CA2142: Il codice Transparent non deve essere protetto con LinkDemand

Articolo Valore
ID regola CA2142
Category Microsoft.Security
Modifica Interruzione

Causa

Un metodo trasparente richiede una SecurityAction o un'altra richiesta di sicurezza.

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione regola

Questa regola viene attivata su metodi trasparenti che richiedono LinkDemands per accedervi. Il codice trasparente per la sicurezza non deve essere responsabile della verifica della sicurezza di un'operazione, pertanto non deve richiedere autorizzazioni. Poiché i metodi trasparenti dovrebbero essere neutrali per la sicurezza, non devono prendere alcuna decisione sulla sicurezza. Inoltre, codice critico sicuro, che esegue decisioni di sicurezza, non deve basarsi su codice trasparente per avere preso in precedenza una decisione di questo tipo.

Come correggere le violazioni

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

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio seguente la regola viene attivata sul metodo perché il metodo è trasparente ed è contrassegnato con un LinkDemand PermissionSet che contiene un oggetto SecurityAction.

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.