Demandas de link

Uma demanda de link faz uma verificação de segurança durante a compilação just-in-time e verifica somente o assembly da chamada imediato do seu código. A vinculação ocorre quando seu código é vinculado a uma referência de tipo, incluindo referências ponteiro de função e chamadas de método. Se o assembly de chamada não tem permissão suficiente para vincular a seu código, o link não é permitido e uma exceção de runtime é lançada quando o código é carregado e executado. As demandas de link podem ser substituídas nas classes que herdam o seu código.

Observe que um stack walk completo não é executado com esse tipo de demanda e que seu código seja ainda suscetível a ataques chamariz. Por exemplo, se um método no assembly a estiver protegido por uma demanda de link, um chamador direto no assembly que b é avaliado com base nas permissões do conjunto b. No entanto, a demanda de link não avaliará um método no assembly c se ele indiretamente chama o método no assembly usando o método no assembly b. A demanda de link Especifica que somente as permissões direcionam chamadores no imediato assembly de chamada devem ter que vincular a seu código. Ele não especifica as permissões de todos os chamadores devem ter para executar seu código.

O Assert, Deny, e PermitOnly modificadores de stack walk não afetam a avaliação das demandas de link. Pois as demandas de link não executam um stack walk, modificadores de stack walk não têm efeito nas demandas de link.

Se um método protegido por uma demanda de link é acessado através de Reflexão, em seguida, uma demanda de link verifica o chamador imediato do código acessado através de reflexão. Isso é verdadeiro para descoberta de método e executadas usando a reflexão de invocação de método. Por exemplo, suponha que o código usa a reflexão para retornar um MethodInfo que representa um método protegido por uma demanda de link de objeto e, em seguida, passa que MethodInfo o objeto para outro código que usa o objeto para invocar o método original. Nesse caso a verificação de demanda de link ocorre duas vezes: uma vez para o código que retorna o MethodInfo objeto e uma vez para o código que invoca a ele.

Observação

Uma demanda de link executada em um construtor de classe estática não protege o construtor porque os construtores estáticos são chamados pelo sistema, fora do caminho de execução de código do aplicativo.Como resultado, quando uma demanda de link é aplicada a uma classe inteira, ele não é possível proteger o acesso a um construtor estático, embora ela protege o restante da classe.

O fragmento de código a seguir declarativamente Especifica que qualquer código vinculando a ReadData método deve ter a CustomPermission permissão. Esta permissão é uma permissão personalizada hipotética e não existe na.NET Framework. A solicitação é feita, passando um SecurityAction.LinkDemand Sinalizar para o CustomPermissionAttribute.

<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.
}

Consulte também

Conceitos

Estendendo metadados usando atributos

Demandas de segurança

Criando suas próprias permissões de acesso ao código

Adicionando suporte a segurança declarativa

Segurança de Acesso de código