You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缓解Fortify SAST检测到的JSF inputHidden XSS漏洞?

JSF h:inputHidden的XSS风险与转义问题解析

先给结论

JSF的<h:inputHidden>组件默认会自动对输出到页面的value值做HTML转义,Fortify报的这个XSS风险大概率是误报,但得搞清楚背后的逻辑。

为什么你用fn:escapeXml没用?

  • fn:escapeXml是JSP里用来直接输出文本时的转义工具,而JSF组件的value属性是由组件自身处理输出转义的。你在EL表达式里套fn:escapeXml,反而会触发双重转义:先被fn转一次,再被JSF组件转一次,结果就是转义后的内容又被转了一遍,看起来完全没起到你想要的效果,而且根本没必要这么做。
  • 举个例子:如果bean.total的值是<script>alert('xss')</script>,用fn:escapeXml后会变成&lt;script&gt;alert('xss')&lt;/script&gt;,然后JSF组件再转一次就成了&amp;lt;script&amp;gt;alert('xss')&amp;lt;/script&amp;gt;,最终页面上的hidden值是这个双重转义后的字符串,完全多余。

什么时候才需要手动转义?

只有当你不通过JSF组件,直接在页面输出EL值的时候(比如用<c:out>标签或者裸写EL表达式),才需要用fn:escapeXml。但<h:inputHidden>本身已经把转义这件事做了,不用你额外处理。

  • 例外:如果你用的是非常老的JSF版本(比如1.0/1.1),可能存在某些边缘场景的转义漏洞,但现在主流的JSF 2.x及以上版本都已经修复了这类问题。

怎么验证转义是否真的生效?

做个简单测试就能确认:

  1. 给bean的total属性赋值为<script>alert('xss')</script>
  2. 渲染页面后查看HTML源码,看hidden input的value值是不是被转义成&lt;script&gt;alert('xss')&lt;/script&gt;
  3. 如果是,说明转义生效,Fortify的检测就是误报,直接标记为False Positive就行。

内容的提问来源于stack exchange,提问作者emgi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:05:00