我有在Java中的MVC Web应用程序非常基本的问题。
由于原始的JSP古时直到当前的技术,如煤层,一个非常基本的图案一直从最初接受请求给创建输出要被发送到客户端视图层控制器内部调度。
该内部调度通常进行通过询问servlet容器用于使用URL的新资源(尽管其机制可能通过配置的额外层被隐藏)。 这些网址的映射是由同一个web.xml也定义了“真实”的URL到外面做。
除非采取特殊措施,通常是可以直接直接访问视图层。 见证Seam的“登记”的演示,在那里你可以绕过“register.seam”,直接进入“registered.xhtml”。 这是一个潜在的安全问题。 最起码,它泄漏视图模板的源代码。
我知道,这只是一个基本的示例应用程序,但它也是奇怪的是,任何额外的措施需要采取申报看不见外面这些内部资源。
什么是限制URL入口点的最简单的方法?
有没有可能像在“WEB-INF”目录下,只能通过内部请求访问的URL魔路径组件?
您可以通过使用一个阻止访问内部资源security-constraint
在您web.xml
部署描述符。
例如,我用下面的配置,以避免JSP中直接访问:
<!-- 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>
我不建议允许Internet请求直接访问应用程序服务器。 我会扔一个web服务器在前面,然后在其中,允许某些类型的URL的请求。 不想让人们去foo.com/jsps? 限制它一劳永逸那里。
有就这个话题有点谈话的位置: 背后隐藏的WEB-INF页面?
处理这种情况的一个方法是构造一个检查每个请求的请求路径,并相应地处理每个请求的Servlet过滤器。 这里是一个链接,可以帮助你开始, 的JavaServer Pages(JSP)和JSTL -用JSP访问控制
现在,我已经看到了几个应用程序,把自己内部的JSP到WEB-INF/jsp
。 这似乎这样的伎俩,至少对于JSP,也为速度。 这似乎并不为JSF工作 ,虽然。