Protegendo páginas de modelo de camada de visão interna em aplicativos de servlet

StackOverflow https://stackoverflow.com/questions/156002

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma pergunta muito básica sobre os aplicativos da Web do MVC em Java.

Desde os antigos dias do JSP bruto até as tecnologias atuais como a costura, um padrão muito básico sempre foi o despacho interno do controlador que inicialmente aceitou a solicitação à camada de visualização que cria a saída a ser enviada ao cliente.

Esse despacho interno geralmente é feito (embora o mecanismo possa estar oculto através de uma camada extra de configuração) pedindo ao contêiner do servlet um novo recurso usando um URL. O mapeamento desses URL é feito pela mesma web.xml que também define o URL "real" para o exterior.

A menos que sejam tomadas medidas especiais, geralmente é possível acessar diretamente a camada de visualização diretamente. Testemunhe a demonstração "Registro" da costura, onde você pode ignorar "Register.seam" e vá diretamente para "Register.xhtml". Este é um problema de segurança em potencial. No mínimo, ele vaza o código -fonte do modelo de exibição.

Estou ciente de que este é apenas um aplicativo de amostra básico, mas também é estranho que quaisquer medidas extras precisem ser tomadas para declarar esses recursos internos invisíveis para o exterior.

Qual é a maneira mais fácil de restringir os pontos de entrada da URL?

Talvez exista algo como o diretório "web-inf", um componente Magic URL Path que só pode ser acessado por solicitações internas?

Foi útil?

Solução 4

Agora vi algumas aplicações que colocam seu JSP interno em WEB-INF/jsp. Isso parece fazer o truque, pelo menos para JSP, e também para a velocidade. Isto não parece funcionar para JSF, no entanto.

Outras dicas

Você pode evitar o acesso a recursos internos usando um security-constraint na tua web.xml Descritor de implantação.

Por exemplo, eu uso a seguinte configuração para evitar o acesso direto aos JSPs:

<!-- Prevent direct access to JSPs. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>JSP templates</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint/> <!-- i.e. nobody -->
</security-constraint>

Eu não recomendaria permitir que solicitações da Internet acessem diretamente seu AppServer. Eu jogava um servidor na frente e depois permitia a solicitação de certos tipos de URLs. Não quer que as pessoas acessem foo.com/jsps? Restringi -lo de uma vez por todas.

Há um pouco de conversa sobre o assunto aqui: escondendo páginas por trás da web-inf?

Uma maneira de lidar com isso seria construir um filtro de servlet que examine o caminho da solicitação de cada solicitação e lida com cada solicitação de acordo. Aqui está um link que pode ajudar você a começar, Javaserver Pages (JSP) e JSTL - Controle de Acesso com JSP

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