首页 文章

使用Primefaces inputText小部件时如何解码文本?

提问于
浏览
1

我正在尝试将XSS预防功能添加到我的JSF / primefaces系统中 . 从参考http://www.ibm.com/developerworks/library/se-prevent/,我理解它应该如何做的方式是:

  • 数据在后端保存原样(即解码) . 例如,"alert(/xss/)"

  • 当显示为输出时,Web服务器(在jsf情况下,托管bean)将对字符进行编码 . 例如,"<script>alert(/xss!/)</script>"

  • 浏览器将下载编码脚本并将其转换回解码方式 . 例如,"alert(/xss/)" . To achieve this in JSF, I would need to set outputText attribute escape="false", otherwise it will escape the characters as that is the default behavior.

除了必须在我的所有小部件中显式设置escape =“false”之外,这个解决方案似乎也有效 . 但是,问题来自于我没有从我的bean读取outputText小部件,而是使用inputText,它将始终保持编码字符串来自托管bean,并且永远不会将其解码回来 .

我有什么想法可以解决这个问题?

1 回答

  • 2

    你似乎有一个重大的误解 . 这篇IBM文章明确针对的是JSP应用程序,它确实在JSP中更好地使用JSTL <c:out> or fn:escapeXml()而不是文章所写的那些笨拙的内容 . 但是,JSF已经内置了自动XSS预防功能,特别是当与Facelets一起用作视图技术而不是其前身JSP时 .

    你是第一个 not 应该在后端手动解码它 . 停止步骤#1将解决所有问题;你不再需要 escape="false" 输出以防止双重转义,你不必担心输入中的正确表示 . 在JSF中,默认情况下一切都是XSS安全的,除非您使用 escape="false" 重新显示用户控制的输入 .

    总而言之,IBM的文章对现代Java Web应用程序来说是垃圾 . 作者似乎有十年历史的JSP,并考虑到了scriptlet .

    另见:

相关问题