Share via


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

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

Exibindo informações de tipo

Aplicando atributos

Ao acessar atributos personalizados

Referência

ReflectionPermissionFlag

ReflectionPermission

SecurityPermission