Compartilhar via


Demanda versus LinkDemand

Segurança declarativa oferece dois tipos de verificações de segurança que são semelhantes, mas executam verificações muito diferentes.Você deve compreender as duas formas porque a escolha errada pode resultar na perda de segurança ou desempenho fraca.Para obter mais informações, consulte Demandas de segurança.

Segurança declarativa oferece as seguintes verificações de segurança:

  • Por solicitação Especifica o código de acesso segurança pilha walk.Todos os chamadores na pilha devem ter a permissão especificada ou identidade para passar.Por solicitação ocorre em cada telefonar porque a pilha pode conter os chamadores diferentes.Se você telefonar um método várias vezes, esta verificação de segurança ocorre cada vez.Por solicitação é mercadoria proteção contra ataques chamariz, código não autorizado tentar obter através dele será detectado.

  • LinkDemand acontece em tempo de compilação just-in-time (JIT) e verifica somente o chamador imediato.Esta verificação de segurança não verifica o chamador do chamador.Uma vez que passa essa verificação, não há nenhuma segurança adicional sobrecarga não importa o quantas vezes o telefonar pode er telefonar.No entanto, também não há nenhuma proteção contra ataques chamariz.Com LinkDemand, qualquer código que passa o teste e pode fazer referência a seu código pode potencialmente quebrar segurança permitindo que um código mal-intencionado telefonar usando o código autorizado.Portanto, não use LinkDemand, a menos que todos os possíveis pontos fracos podem ser evitados por completo.

As precauções extras necessários ao usar LinkDemand deve ser programado individualmente; o sistema de segurança pode ajudar com a imposição.Qualquer erro abre representa uma vulnerabilidade de segurança.Todos autorizados que usa seu código deve ser responsável pela implementação de segurança adicional, fazendo o seguinte código:

  • Restringindo o acesso do código de chamada à classe ou assembly.

  • Colocando a mesma segurança verifica o código de chamada que aparecem no código que está sendo chamado e obligating seus chamadores para fazer isso.Por exemplo, se você escrever código que chama um método que está protegido por um LinkDemand for the SecurityPermission com o UnmanagedCode sinalizar especificado, o método também deve fazer um LinkDemand (or Por solicitação, que é mais forte) para que esta permissão.A exceção é se o código usa o LinkDemand - protegido método em uma forma limitada que você decidir é seguro, dada outros mecanismos de proteção de segurança (sistema autônomo demandas) em seu código.Nesse caso excepcional, o chamador tem responsabilidade em enfraquecendo a proteção de segurança do código subjacente.

  • Garantir que os chamadores do seu código não é possível enganar seu código para chamar o código protegido em nome deles.Em outras palavras, os chamadores não podem forçar o código autorizado para passar parâmetros específicos para o código protegido, ou para obter resultados de volta dele.

Se um método virtual, propriedade ou evento com LinkDemand substitui um método de classe base, o método da classe base também deve ter o mesmo LinkDemand para o método substituído para que sejam efetivo.É possível converter volta para o tipo de base de código mal-intencionado e telefonar o método da classe base.Observe também que as demandas de link podem ser adicionadas implicitamente para módulos (assemblies) que não têm o AllowPartiallyTrustedCallersAttribute atributo de nível de assembly.

Ele é uma mercadoria prática para proteger a implementações de método com demandas de link quando métodos de interface também têm as demandas de link.Observe o seguinte sobre o uso de demandas de link com interfaces:

  • The AllowPartiallyTrustedCallersAttribute atributo também se aplica às interfaces.

  • Você pode colocar sistema autônomo demandas de link em interfaces para proteger seletivamente certas interfaces de que estão sendo usadas por códigos parcialmente confiável, sistema autônomo ao usar o AllowPartiallyTrustedCallersAttribute atributo.

  • Se você tiver uma interface definida em um assembly que não contenha o AllowPartiallyTrustedCallersAttribute atributo, você pode implementar essa interface em uma classe parcialmente confiável.

  • Se você colocar um LinkDemand em um método público de uma classe que implementa um método de interface, a LinkDemand não será aplicada se você converter para a interface e chama o método.Nesse caso, porque você vinculado em relação a interface, apenas o LinkDemand na interface respeitadas.

Revise os seguintes itens para problemas de segurança:

  • Demandas de link explícita em métodos de interface.Certifique-se de que essas demandas de link oferecem a proteção esperada.Determine se um código mal intencionado poderá utilizar uma projeção de contornar sistema autônomo demandas de link conforme descrito anteriormente.

  • Métodos virtual com demandas de link aplicadas.

  • Tipos e as interfaces que implementam.Esses devem usar consistentemente as demandas de link.

Consulte também

Outros recursos

Diretrizes para Codificação Segura