Biblioteca MSDN

Demandas de link

 

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

Observe que uma movimentação de pilha completa não é executada com esse tipo de demanda e que seu código seja ainda suscetível a ataques.Por exemplo, se um método em um assembly é protegido por uma demanda de link, um chamador direto no assembly B é avaliado com base nas permissões do Assembly B.No entanto, a demanda de link não avaliará um método no assembly C se indiretamente chama o método no assembly usando o método no assembly B.A demanda de link Especifica que apenas as permissões direcionam os chamadores no assembly de chamada imediato devem ter que vincular ao seu código.Ele especifica as permissões de todos os chamadores devem ter para executar seu código.

OAssertDenyePermitOnlymodificadores de movimentação de pilha não afetam a avaliação das demandas de link.Porque as demandas de link não realizar uma movimentação de pilha, os modificadores de movimentação de pilha não têm efeito nas demandas de link.

Se um método protegido por uma demanda de link é acessado por meio deReflexão no .NET Frameworkentão uma demanda de link verifica se o chamador imediato do código acessado por meio de reflexão.Isso é verdadeiro para descoberta de método e executada usando a reflexão de invocação de método.Por exemplo, suponha que o código usa a reflexão para retornar umMethodInfodo objeto que representa um método protegido por uma demanda de link e, em seguida, passa queMethodInfoobjeto para algum 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 oMethodInfoobjeto e uma vez para o código que o chama.

System_CAPS_noteObservaçã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 pode proteger o acesso a um construtor estático, embora protege o restante da classe.

O fragmento de código a seguir especifica declarativamente todo o código de vinculação para oReadDatamétodo deve ter oCustomPermissionpermissão.Essa permissão é uma permissão personalizada hipotética e não existe no .NET Framework.A solicitação é feita, passando umSecurityAction.LinkDemandsinalizar para oCustomPermissionAttribute.

[CustomPermissionAttribute(SecurityAction.LinkDemand)]
public static string ReadData()
{
    // Access a custom resource.
}
Mostrar:
© 2016 Microsoft