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.
Interfaces e demandas de link
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.