Considerações de segurança para reflexão
Reflexão oferece a capacidade para obter informações sobre tipos e membros e para acessar membros.Acessar membros confidenciais poderia criar um risco de segurança.Portanto, o código que acessa os membros confidenciais requer ReflectionPermission com os sinalizadores adequados. Além disso, SecurityPermission é necessário para algumas tarefas, sistema autônomo fornecer provas, executando código não gerenciado e serialização de objetos.
Todo o código pode usar a reflexão para executar as seguintes tarefas sem permissões:
Enumerar tipos e membros e examine seus metadados.
Enumerar e examinar conjuntos de módulos e módulos.
Membros públicos de acesso.
Acesso protected membros de classes base do código de chamada. (Na reflexão, isso é chamado sistema autônomo acesso no nível da família.)
Acesso internal () membrosFriend membros no Visual Basic) no assembly do código de chamada. (Na reflexão, isso é chamado sistema autônomo o acesso ao nível de conjunto.)
Acessar membros confidenciais
Usar a reflexão para invocar os membros que estão inacessíveis a de acordo com as regras de acessibilidade do common linguagem tempo de execução, seu código deve receber uma das duas permissões:
Para permitir que o código para invocar qualquer membro confidenciais: ReflectionPermission com o ReflectionPermissionFlag.MemberAccess sinalizar.
Observação: Por padrão, the de diretiva de segurança Propriedades Esta permissão de código que é originado da Internet.Essa permissão deve nunca ser concedido ao código originado da Internet.
Para permitir que o código para invocar qualquer membro confidenciais, desde que a concessão de conjunto de módulos (assembly) que contém o membro invocado seja o mesmo ou um subconjunto do conjunto concessão do assembly que contém o código de chamada: ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizar.
Por exemplo, suponha que você conceder permissões de Internet de um domínio do aplicativo mais ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizar e, em seguida, execute um aplicativo da Internet com dois assemblies, A e B.
Assembly A pode usar reflexão para acessar particular membros do conjunto B, porque o conjunto de concessão de módulos (assembly) B não inclui todas as permissões que A não foi concedido.
Assembly A não é possível usar a reflexão para acesso membros privados de .NET Framework assemblies sistema autônomo mscorlib.dll, sistema autônomo mscorlib.dll é totalmente confiável e, portanto, tem sistema autônomo permissões que não foram concedidas ao assembly a. A MemberAccessException é lançada quando a segurança de acesso do código examina a pilha em time de execução.
Para obter um exemplo de um domínio do aplicativo no modo seguro que concede ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizar, consulte Demonstra Passo a passo: Emitir código em cenários de confiança parcial.
Série
Para a serialização, SecurityPermission com o SecurityPermissionAttribute.SerializationFormatter sinalizar fornece a capacidade para obter e conjunto membros de tipos serializáveis, independentemente da acessibilidade. Essa permissão permite que o código descobrir e alterar o estado de uma instância particular.(Bem sistema autônomo sendo com sistema autônomo permissões adequadas, o tipo deve ser marcado sistema autônomo serializável nos metadados.)
Verificações de demanda de link
Se um método ou um delegado tem um LinkDemand permissão P, o tempo de execução irá executar uma verificação de demanda de link contra o chamador do método ou delegate para verificar que o chamador tenha sido concedido permissão P.Essa verificação de demanda de link ocorre para descoberta de informações de tipo e para invocação.
Evitar a criação de parâmetros de tipo MethodInfo
Evite escrever APIs públicas que se MethodInfo parâmetros, especialmente para código altamente confiável. Essas APIs pode estar mais vulneráveis a códigos mal-intencionados.Por exemplo, considere uma API pública no código altamente confiável que leva um MethodInfo parâmetro. Suponha que a API pública indiretamente chama a Invoke método no parâmetro fornecido. Se a API pública não executa as verificações de permissão necessária, a telefonar para o Invoke método sempre terá êxito porque o sistema de segurança determina se o chamador é altamente confiável. Mesmo se um código mal-intencionado não tiver a permissão para chamar o método diretamente, ele ainda pode fazer então indiretamente chamando a API pública.
Informações sobre versão
The ReflectionPermissionFlag.RestrictedMemberAccess sinalizar é apresentado na .NET Framework versão 2.0 Service Pack 1. Versões anteriores do .NET Framework exigir o ReflectionPermissionFlag.MemberAccess sinalizar para o código que usa a reflexão para acessar membros confidenciais. Esta é uma permissão que nunca deve ser concedida ao código parcialmente confiável.
Observação: |
---|
Para Use o ReflectionPermissionFlag.RestrictedMemberAccess sinalizar, seu aplicativo deve visar o .NET Framework versão 3.5. Para obter mais informações, consulte Arquitetura do .NET Framework 3.5. |
Começando com o .NET Framework 2,0, usando a reflexão para obter informações sobre tipos confidenciais e membros não requer quaisquer permissões. Em versões anteriores, ReflectionPermission com o ReflectionPermissionFlag.TypeInformation sinalizar é necessária.
Consulte também
Conceitos
Problemas de segurança no reflexão Emit
Ao acessar atributos personalizados