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.