当您使用 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,并使用安全约束来禁止访问这些文件,如: 如何避免用户访问 JSF 中的 .xhtml 页面?
这两种解决方案都在 JSF 2.0 规范中作为可行的替代方案提出,但是没有关于这两种解决方案的不同安全方法的消息。
由于不考虑安全性,我想知道从访问 xhtml 文件的角度来看,第一个是否是“安全的”,或者是否存在获取 .xhtml 源的黑客攻击。