jsf url 映射安全风险

标签 jsf netbeans security url-mapping

当您使用 JSF 时,您将拥有 Controller servlet javax.faces.webapp.FacesServlet,它将映射到以下内容:

<servlet-mapping>
   ...
    <url-pattern>/somefacesurl/*</url-pattern>
</servlet-mapping>

将 mypage.xhtml 放入/中,我们存在安全风险,因为它将通过两种方式访问​​(从应用程序上下文开始): 1) /somefacesurl/mypage.xhtml 2) /mypages.xhtml

第一个是由jsf处理的,是正确的。 第二个不由 jsf 处理,因此呈现给客户端,暴露 jsf 标签,这是一个安全风险。

我只找到了两个解决方案
1) 始终映射到根 url:

<servlet-mapping>
   ...
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

很好的解决方案,但只允许按文件扩展名进行映射。

2) 映射到任何 url,并使用安全约束来禁止访问这些文件,如下所示: How to avoid user access to .xhtml page in JSF?

这两种解决方案都作为可行的替代方案出现在 JSF 2.0 规范中,但没有提及这两种解决方案的不同安全方法。

由于没有考虑安全性,我想知道从访问 xhtml 文件的角度来看,第一个是否是“安全的”,或者可能存在获取 .xhtml 源的黑客攻击。

最佳答案

JSF 规范强制要求第一个映射是不正确的。它仅提供了 JSF 2.0 规范的第 11.1.2 章(您应该阅读)和 JSF 1.2 规范的第 10.1.2 章中的两个映射的示例。以下是 JSF 2.0 规范一的相关摘录(重点是我的):

11.1.2 Servlet Mapping

All requests to a web application are mapped to a particular servlet based on matching a URL pattern (as defined in the Java Servlet Specification) against the portion of the request URL after the context path that selected this web application. JSF implementations must support web application that define a <servlet-mapping> that maps any valid url-pattern to the FacesServlet. Prefix or extension mapping may be used. When using prefix mapping, the following mapping is recommended, but not required:

<servlet-mapping>
    <servlet-name> faces-servlet-name </servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

When using extension mapping the following mapping is recommended, but not required:

<servlet-mapping>
    <servlet-name> faces-servlet-name </servlet-name>
    <url-pattern>*.faces</url-pattern>
</servlet-mapping>

In addition to FacesServlet, JSF implementations may support other ways to invoke the JavaServer Faces request processing lifecycle, but applications that rely on these mechanisms will not be portable.

我真的不明白为什么扩展名(后缀)映射是“棘手的”。更重要的是,这是我最喜欢的 JSF 映射。我建议使用*.xhtml作为 JSF 映射。这还为您提供了一个优势,即您无需摆弄安全约束来阻止直接访问源文件。

<小时/>

更新:请注意,只要 View 是声明性的并且不包含任何单行 Java 源代码(其中存在数据库用户名/密码等变量),源泄漏本身就不是安全问题被存储和暴露。由于 Facelets 不允许嵌入原始 Java 代码(如 JSP scriptlet),我不明白这是一个安全漏洞。黑客可以用查看源代码做什么?编辑它,渲染它并以某种方式提交回来? (我真的很想知道如何)。这显然是不可能的,因为 JSF 默认情况下也依赖于服务器端的 View 状态。

不过,我同意 JSF 规范应该向读者提供更多有关这一点的信息。我创建了JSF spec issue 1015为此。

关于jsf url 映射安全风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341361/

相关文章:

java - 将颜色更改为 <ice :commandLink>

java - jQuery 表单提交在 JSF 中不起作用?

php - 当我尝试使用 <?php echo $id ?> 时,netbeans php 中属性 id "no whitespace"的错误值?

android - 在 Android 中存储 session key

security - SSL 是否提供点对点安全性?

android - 如何在跨应用程序发送 Intent 数据时保护它

java - 具有 session 复制的tomcat集群中的jsf应用程序

javascript - 使用javascript调用bean方法

jsf - 在 NetBeans 中,Mojarra 2.2 outputStyleSheet 没有媒体属性

java - Jtable ArrayIndexOutOfBounds异常-1