防止 JSF <f:param> 中的 XSS 反射

Posted

技术标签:

【中文标题】防止 JSF <f:param> 中的 XSS 反射【英文标题】:Prevent XSS Reflection in JSF <f:param> 【发布时间】:2017-06-05 17:21:34 【问题描述】:

我正在支持使用 JSF(和 JSP)的遗留应用程序。我正在尽我所能通过在代码中添加验证器和转义符来防止 XSS。我是 JSF 的新手。

代码示例(在 xhtml 中):

<h:form id="someForm">
<f:param name="someProperty" value="#someBean.someProperty"/>
</h:form>

我的问题 我们的安全扫描器说这很容易受到 XSS 反射的影响。我想为属性值添加转义。

我的研究: 我读过 JSF 通常会自动转义 .它有一个参数,您必须将其设置为 fales 才能禁用它。不过好像没有这个功能。我发现了一个可能有效的建议代码 sn-p:

<f:param name="someProperty" value="#fn:escapeXml(someBean.someProperty)"/>

但是,当我使用 fn:escapeXml 时,页面无法加载。这通常是如何解决的?

注意,这是一个重要的遗留应用程序。希望采取最少的规避行动。

上述文章: JSF 2.0; escape="false" alternative to prevent XSS?

【问题讨论】:

错误信息是什么? 浏览器错误没有用:无法打开localhost:8080/someFile.jsf 我能够在调试模式下从控制台中得到它:原因:javax.el.E​​LException:函数'fn:escapeXml'不是找到 【参考方案1】:

这很尴尬。 结果是我的 xhtml 文件中的一个缺少所需的导入: xmlns:fn="http://java.sun.com/jsp/jstl/functions"

我添加了它,它现在似乎可以工作了!

【讨论】:

以上是关于防止 JSF <f:param> 中的 XSS 反射的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 设置 f:param 值

使用 JSF ajax 请求刷新 URL

通过客户端状态保存防止 JSF2 中的 CSRF

JSF 2.1 中的 HTML 4 <按钮>

JSF 中的导航

shiro 中的 JSF 更改会话超时