CA2142: El código transparente no debe protegerse con LinkDemands

Elemento Valor
RuleId CA2142
Category Microsoft.Security
Cambio importante Problemático

Causa

Un método transparente requiere SecurityAction, o cualquier otra demanda de seguridad.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

Esta regla se desencadena en los métodos transparentes que requieren que LinkDemands accedan a ellos. El código transparente en seguridad no debería ser responsable de comprobar la seguridad de una operación y, por consiguiente, no debería exigir permisos. Como se supone que los métodos transparentes son neutrales, en lo que a seguridad se refiere, no deben tomar ninguna decisión de seguridad. Además, el código crítico seguro, que es el que toma decisiones de seguridad, no debe depender del código transparente para que haya tomado previamente dicha decisión.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite la demanda de vínculo en el método transparente o marque el método con el atributo SecuritySafeCriticalAttribute si realiza comprobaciones de seguridad, como las demandas de seguridad.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente, la regla se activa en el método porque este es transparente y está marcado con un LinkDemand PermissionSet que contiene 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()
        {
        }
    }
}

No suprima las advertencias de esta regla.