我正在测试针对跨站点脚本漏洞的primefaces(4.0)应用程序。现在我发现了p:panel header属性的问题。
<p:panel header="#{post.title}" footer="Date: #{post.date}">
header属性的值是用户插入的数据。当post.title包含Javascript时,它会被浏览器执行。例如,当post.title为<script>alert(1)</script>
时会出现弹出窗口。
我不明白为什么它在这种情况下不被编码,因为我认为在使用表达式语言时它随时会被输出编码。你能帮我解决为什么会有XSS漏洞吗?
答案 0 :(得分:1)
我们也遇到了这个问题并填写了错误报告:http://code.google.com/p/primefaces/issues/detail?id=6766
此外,PrimeFaces论坛中有关于此问题的讨论: http://forum.primefaces.org/viewtopic.php?f=3&t=34678
作为一种解决方法,您可以按如下方式使用该面板:
<p:panel>
<f:facet name="header">
#{myBean.usersText}
</f:facet>
<f:facet name="footer">
#{myBean.usersText}
</f:facet>
</p:panel>
请注意,ELs在向用户显示时不会随时转义。这是组件或开发人员的责任。但是, h:outputText 等大多数组件都会转义给定的输入。