Compartir a través de


CA2142: El código transparente no se debería proteger con LinkDemands

Nombre de tipo

TransparentMethodsShouldNotBeProtectedWithLinkDemands

Identificador de comprobación

CA2142

Categoría

Microsoft.Security

Cambio problemático

Motivo

Un método transparente requiere una LinkDemand u otra demanda de seguridad.

Descripción de la regla

Esta regla se desencadena en los métodos transparentes que requieren que las LinkDemand tengan acceso a ellos.El código transparente para la seguridad no debe ser responsable de comprobar la seguridad de una operación y, por tanto, no debe pedir permisos.Como se supone que los métodos transparentes tienen una seguridad neutra, no deberían tomar ninguna decisión de seguridad.Además, el código crítico para la seguridad, que toma las decisiones de seguridad, no debería basarse en el código transparente para haber tomado este tipo de decisión previamente.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite la petición de vínculo en el método transparente o marque el método con el atributo SecuritySafeCriticalAttribute si está realizando comprobaciones de seguridad, por ejemplo demandas de seguridad.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente, la regla desencadena en el método porque este es transparente y se marca con una LinkDemand PermissionSet que 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()
        {
        }
    }
}

No suprima las advertencias de esta regla.