Peticiones de vínculos

Una petición de vínculo hace que se produzca una comprobación de seguridad durante la compilación Just-In-Time que sólo comprueba el ensamblado de llamada inmediato del código. La vinculación se produce cuando el código se enlaza a una referencia de tipo, incluidas las referencias a punteros a función y las llamadas a métodos. Si el ensamblado de llamada no dispone del permiso necesario para vincularse al código, no se permite el vínculo y se produce una excepción en tiempo de ejecución cuando se carga y ejecuta el código. Las peticiones de vínculos se pueden reemplazar en las clases heredadas del código.

Observe que con este tipo de petición no se realiza un recorrido de pila completo y que el código sigue siendo susceptible a los ataques. Por ejemplo, si un método del ensamblado A está protegido por una petición de vínculo, un llamador directo del ensamblado B se evalúa dependiendo de los permisos del ensamblado B. Sin embargo, la petición de vínculo no evaluará un método del ensamblado C si llama indirectamente al método del ensamblado A usando el método del ensamblado B. La petición de vínculo solo especifica los permisos que los llamadores directos en el ensamblado de llamada inmediato deben tener para establecer un vínculo a su código. No especifica los permisos que deben tener los llamadores para ejecutar el código.

Los modificadores de recorrido de pila Assert, Deny y PermitOnly no afectan a la evaluación de peticiones de vínculos. Como las peticiones de vínculos no realizan ningún recorrido de pila, los modificadores de recorrido de pila no tienen ningún efecto sobre las peticiones de vínculos.

Si el acceso a un método protegido por una petición de vínculo se realiza mediante Reflexión, la petición de vínculo comprueba el llamador inmediato del código al que se obtiene acceso mediante reflexión. Esto se aplica tanto a la detección de métodos como a la invocación de métodos realizados mediante reflexión. Supongamos, por ejemplo, que el código utiliza la reflexión para devolver un objeto MethodInfo que representa un método protegido por una petición de vínculo y después pasa ese objeto MethodInfo a otro código que lo utiliza para invocar el método original. En este caso, la comprobación de la petición de vínculo tiene lugar dos veces: una vez para el código que devuelve el objeto MethodInfo y otra vez para el código que lo invoca.

NotaNota

Una petición de vínculo realizada en un constructor de clases estáticas no protege el constructor porque el sistema llama a los constructores estáticos, fuera de la ruta de ejecución de código de la aplicación.Como resultado, cuando se aplica una petición de vínculo a toda la clase, no puede proteger el acceso a un constructor estático, aunque protege el resto de la clase.

En el siguiente fragmento de código se especifica de manera declarativa que cualquier código que se vincule al método ReadData debe tener el permiso CustomPermission. Este permiso es un permiso personalizado hipotético y no existe en .NET Framework. Para realizar la petición, se pasa al atributo CustomPermissionAttribute un marcador SecurityAction.LinkDemand.

<CustomPermissionAttribute(SecurityAction.LinkDemand)> _
Public Shared Function ReadData() As String
    ' Access a custom resource.
End Function  
[CustomPermissionAttribute(SecurityAction.LinkDemand)]
public static string ReadData()
{
    // Access a custom resource.
}

Vea también

Conceptos

Extender metadatos mediante atributos

Peticiones de seguridad

Crear permisos de acceso a código propios

Agregar compatibilidad con la seguridad declarativa

Seguridad de acceso del código