Condividi tramite


CA2143: I metodi Transparent non devono utilizzare SecurityDemand

TypeName

TransparentMethodsShouldNotDemand

CheckId

CA2143

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Il metodo o il tipo Trasparent è contrassegnato in modo dichiarativo da una richiesta System.Security.Permissions.SecurityAction.Demand oppure il metodo chiama il metodo CodeAccessPermission.Demand.

Descrizione della regola

Il codice trasparente per la sicurezza non deve essere responsabile della verifica della sicurezza di un'operazione, pertanto non deve richiedere autorizzazioni. Il codice trasparente per la sicurezza deve utilizzare richieste complete per prendere decisioni relative alla sicurezza e il codice critico per la sicurezza non deve basarsi sul codice trasparente per l'esecuzione della richiesta completa. Qualsiasi codice che esegue controlli di sicurezza, come ad esempio le richieste di sicurezza, devono essere invece SafeCritical.

Come correggere le violazioni

In generale, per correggere una violazione di questa regola, contrassegnare il metodo con l'attributo SecuritySafeCriticalAttribute. È anche possibile rimuovere la richiesta.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

I file delle regole nel seguente codice perché un metodo trasparente fa una richiesta di sicurezza dichiarativa.

using System;
using System.Security;
using System.Security.Permissions;

namespace TransparencyWarningsDemo
{

    public class TransparentMethodDemandClass
    {
        // CA2142 violation - transparent code using a Demand.  This can be fixed by making the method safe critical.
        [PermissionSet(SecurityAction.Demand, Unrestricted = true)]
        public void TransparentMethod()
        {
        }
    }
}

Vedere anche

Riferimenti

CA2142: Il codice Transparent non deve essere protetto con LinkDemand