【问题标题】:jsf url-mapping security riskjsf url-mapping 安全风险
【发布时间】:2011-09-14 13:02:29
【问题描述】:

当您使用 JSF 时,您将拥有将映射到以下内容的控制器 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 源的黑客攻击。

【问题讨论】:

  • 很好的解决方案,但只允许文件类型映射,不允许更多目录映射。 没有得到这个。目录映射是什么意思?
  • 此外,NetBeans (6.9.0) 等一些 IDE 采用第二种解决方案,未能记录安全风险。

标签: jsf netbeans security url-mapping


【解决方案1】:

JSF 规范要求第一个映射是不正确的。它只是在 JSF 2.0 规范的第 11.1.2 章(您应该阅读)和 JSF 1.2 规范的第 10.1.2 章中给出了这两种映射的示例。以下是 JSF 2.0 规范一的相关性摘录(重点是我的):

11.1.2 Servlet 映射

对 Web 应用程序的所有请求都根据匹配的 URL 模式映射到特定 servlet(如 Java Servlet 规范)针对选择此 Web 的上下文路径之后的请求 URL 部分 应用。 JSF 实现必须支持定义 &lt;servlet-mapping&gt; 的 Web 应用程序 将任何有效的url-pattern 映射到FacesServlet可以使用前缀或扩展名映射。 当 使用前缀映射,建议使用以下映射,但不是必需的:

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

使用扩展映射时,建议使用以下映射,但不是必需的:

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

除了FacesServlet,JSF 实现可能支持其他方式来调用 JavaServer Faces 请求 处理生命周期,但依赖这些机制的应用程序将不可移植。

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


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

然而,我同意 JSF 规范应告知读者更多关于这一点的观点。我为此创建了JSF spec issue 1015

【讨论】:

  • 从不说任务,说是建议。更多的!为了清楚起见,我说“建议但不是必需的”。你跳过阅读了吗?
  • 您的问题给人的印象是 JSF 规范没有提到扩展映射。您说这很“棘手”,但事实并非如此。
  • 好的,我接受批评,并相应地修改了问题。重点是安全和安全文档。我从采用 2 解决方案的 Netbeans 开始,然后我意识到(幸运的是,它可能不会发生)风险。我认为完整的文档至少应该提到这样一个事实,即在没有对策的情况下,技术允许访问源文件。令我困惑的是它没有。
  • 老兄,你的问题比仅仅看到视图源的人要大得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2013-05-17
  • 2010-11-24
  • 2013-07-07
  • 2012-08-17
  • 2017-08-07
相关资源
最近更新 更多