我正在尝试将XSS预防功能添加到我的JSF / primefaces系统中。从参考http://www.ibm.com/developerworks/library/se-prevent/开始,我理解它应该如何完成的方式是:
除了必须在我的所有小部件中显式设置escape =“false”之外,这个解决方案似乎也有效。但是,问题来自于我没有从我的bean读取outputText小部件,而是使用inputText,它将始终保持编码字符串来自托管bean,并且永远不会将其解码回来。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:2)
你似乎有一个重大的误解。 IBM的这篇文章明确针对的是普通香草&#34;实际上没有任何形式的自动XSS预防的JSP应用程序(即使你在JSP中更好地只使用JSTL <c:out>
or fn:escapeXml()
而不是文章所写的那些笨拙)。但是,JSF已经内置了自动XSS预防功能,特别是当与Facelets一起用作视图技术而不是其前身JSP时。
您首先不应该在后端手动解码它。停止步骤#1将解决所有问题;你不再需要escape="false"
输出以防止双重转义,你不必担心输入中的正确表示。在JSF中,当您使用escape="false"
重新显示用户控制的输入时,默认情况下一切都是XSS安全除之外。
总而言之,IBM的文章对现代Java Web应用程序来说是垃圾。作者似乎有十年历史的JSP,其中包含 scriptlets 。