1

我有一个关于 Java 中的 MVC Web 应用程序的非常基本的问题。

从原始 JSP 的早期直到像 Seam 这样的当前技术,一个非常基本的模式一直是从最初接受请求的控制器到视图层的内部调度,该视图层创建要发送到客户端的输出。

这种内部调度通常是通过使用 URL 向 servlet 容器请求新资源来完成的(尽管该机制可能通过额外的配置层隐藏)。这些 URL 的映射由相同的 web.xml 完成,该 web.xml 还定义了到外部的“真实”URL。

除非采取特殊措施,否则通常可以直接访问视图层。见证Seam“注册”演示,您可以在其中绕过“register.seam”并直接转到“registered.xhtml”。这是一个潜在的安全问题。至少,它泄露了视图模板源代码。

我知道这只是一个基本的示例应用程序,但也很奇怪,需要采取任何额外的措施来声明这些内部资源对外部不可见。

限制 URL 入口点的最简单方法是什么?

是否可能有类似“WEB-INF”目录的东西,一个只能由内部请求访问的神奇 URL 路径组件?

4

4 回答 4

3

security-constraint您可以通过在web.xml部署描述符中使用 a 来阻止对内部资源的访问。

例如,我使用以下配置来防止直接访问 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>
于 2009-01-17T14:37:06.003 回答
1

我不建议允许 Internet 请求直接访问您的应用服务器。我会在前面放置一个网络服务器,然后在其中允许某些类型的 URL 的请求。不想让人们访问 foo.com/jsps?一劳永逸地限制它。

这里有一些关于该主题的对话:将页面隐藏在 WEB-INF 后面?

于 2008-10-01T02:38:01.133 回答
1

处理这个问题的一种方法是构造一个 Servlet 过滤器,它检查每个请求的请求路径并相应地处理每个请求。这是一个可以帮助您入门的链接,JavaServer Pages (JSP) and JSTL - Access control with JSP

于 2008-10-01T03:55:01.823 回答
0

我现在已经看到了几个将其内部 JSP 放入WEB-INF/jsp. 这似乎可以解决问题,至少对于 JSP 和 Velocity 来说也是如此。不过,它似乎不适用于 JSF

于 2010-01-12T01:06:58.110 回答