Pergunta

A falta de reflexão em ambientes de hospedagem de confiança média parece causar muitos problemas Para muitos aplicativos populares da Web.

  • Por que é ReflexãoPermission desativado por padrão com confiança média?
  • Que risco a reflexão representa em um ambiente de hospedagem compartilhada?

Para referência aleatória, veja MSDN: Como usar o Medium Trust no ASP.NET 2.0

Foi útil?

Solução

A reflexão permite que o código malicioso inspecione todos os tipos de segredos: não tanto propriedade intelectual (embora com certeza, também), mas dados que devem ser privados e seguros, como seqüências de seqüências de conexão, senhas, dados da conta bancária, etc.

Obviamente, muitos programas expõem esses dados, como é claro, por meio de vetores ainda com mais comprometimentos, mas não há razão para aumentar a superfície de ataque de um aplicativo.

Editado para trazer parte da conversa dos comentários:

Provavelmente é verdade que o risco real é o acesso irrestrito do sistema de arquivos, que é o que transforma a reflexão em um perigo real. Se um ator ruim puder obter uma montagem (ou algo que é compilado em uma montagem) em seu diretório virtual, você estará com problemas se eles tiverem permissão de reflexão. (Obviamente, se isso acontecer, também existem outros problemas em potencial, mas isso não deve descontar essa vulnerabilidade específica.)

Em um ambiente de hospedagem compartilhada, é mais difícil de impedir, embora certamente não seja impossível. Talvez valha a pena cruzar essa pergunta para ServerFault Para ver o que as pessoas boas têm a dizer.

Outras dicas

Nunca encontrei nada 'ruim' que um usuário poderá fazer usando a reflexão. As pessoas ficam assustadas porque você é capaz de chamar métodos marcados como privados ou protegidos, mas pelo que eu vi, nenhum deles impõe qualquer risco real.

Provavelmente, é pelo menos na parte uma técnica de vendas para que você desembarque para (semi-) hospedagem dedicada :)

Eu encontrei o seguinte artigo do MSDN sobre este assunto:

Considerações de segurança para reflexão

Este artigo ecoa a resposta de Jeff:

A reflexão fornece a capacidade de obter informações sobre tipos e membros e acessar os membros. O acesso aos membros não públicos pode criar um risco de segurança. Portanto, o código que acessa os membros não públicos requer a reflexão com os sinalizadores apropriados.

No entanto, não acredito que esse risco possa ser explorado entre as contas de hospedagem do cliente. Parece que isso apenas representaria um risco pessoal. Por exemplo, usando a reflexão, eu poderia explorar minhas próprias montagens no meu ambiente de hospedagem. Outros clientes, no entanto, não puderam usar a reflexão para explorar minha assemblies. Eles só podiam explorar seus assemblies.

Isso pode representar um problema para um único aplicativo da Web que envolve várias equipes de desenvolvimento. Uma equipe de desenvolvimento poderia usar a reflexão para explorar as assembléias de outra equipe de desenvolvimento.

No entanto, este é um cenário raro para um ambiente de hospedagem compartilhado. A maioria dos sites de hospedagem compartilhada envolve uma equipe muito pequena que tem acesso total a tudo o código. Em outras palavras, não há segredos. Enquanto a assembléia estiver a salvo de outros clientes de hospedagem compartilhada, não é um problema.

A ativação da reflexão não deve representar nenhum risco para a maioria dos aplicativos da Web de hospedagem compartilhada:

<IPermission class="ReflectionPermission" version="1" Flags="RestrictedMemberAccess"/>

Por favor me corrija se eu estiver errado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top