Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nombre de tipo |
DelegatesMustBindWithConsistentTransparency |
Identificador de comprobación |
CA2133 |
Categoría |
Microsoft.Security |
Cambio problemático |
Sí |
Nota
Esta advertencia solo se aplica al código que está ejecutando CoreCLR (la versión de CLR que es específica de las aplicaciones web de Silverlight).
Causa
Esta advertencia se desencadena en un método que enlaza un delegado que está marcado con SecurityCriticalAttribute a un método que es transparente o que está marcado con SecuritySafeCriticalAttribute. La advertencia también desencadena un método que enlaza un delegado que es transparente o crítico para la seguridad a un método crítico.
Descripción de la regla
Los tipos de delegado y los métodos a los que se enlazan deben tener una transparencia coherente. Los delegados transparentes y críticos para la seguridad solo pueden enlazar con otros métodos transparentes o críticos para la seguridad. De igual forma, los delegados críticos solo pueden enlazar a métodos críticos. Estas reglas de enlace aseguran que el único código que puede invocar un método a través de un delegado también pudiera haber invocado directamente el mismo método. Por ejemplo, las reglas de enlace evitan que el código transparente llame directamente al código crítico a través de un delegado transparente.
Cómo corregir infracciones
Para corregir una infracción de esta advertencia, cambie la transparencia del delegado o del método al que enlaza para que la transparencia de los dos sea equivalente.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Código
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public delegate void TransparentDelegate();
[SecurityCritical]
public delegate void CriticalDelegate();
public class TransparentType
{
void DelegateBinder()
{
// CA2133 violation - binding a transparent delegate to a critical method
TransparentDelegate td = new TransparentDelegate(CriticalTarget);
// CA2133 violation - binding a critical delegate to a transparent method
CriticalDelegate cd = new CriticalDelegate(TransparentTarget);
}
[SecurityCritical]
void CriticalTarget() { }
void TransparentTarget() { }
}
}