摘要:<p:confirmDialog message>
属性不会转义HTML,因此会打开潜在的XSS攻击漏洞。我该如何解决?
下面的原始问题(原始标题是: XSS攻击:如何防止应用程序响应中的脚本注入):
我正在使用JSF应用程序目前我正面临xss攻击的问题我已经对它进行了多项研究。但无法找到解决方案。我正在使用OWASP工具进行测试。我能够在请求中阻止xss攻击,但不能用于响应。对于请求,我使用过滤器过滤请求并给出正确的输出,但响应不由同一解决方案处理。一旦响应来自应用程序控制转到OWSAP然后我在其中注入脚本并将其显示在浏览器上:(
Xhtml代码:
<p:panel header="Regions">
<p:dataTable id="regionsTable"
var="region"
value="#{regionsBean.regions}"
rowKey="#{region.id}"
selectionMode="single"
selection="#{regionsBean.selectedRegion}">
<p:column styleClass="colID">
<f:facet name="header">ID</f:facet>
<h:outputText value="#{region.id}" />
</p:column>
<p:column>
<f:facet name="header">Region</f:facet>
<h:outputText value="#{region.regionDescription}" />
</p:column>
<p:column styleClass="colActionRegions">
<f:facet name="header">Action</f:facet>
<p:commandLink id="deleteRegionLnk"
oncomplete="deleteRegionConfirm.show()" update=":regionForm:dltDlg">
<p:graphicImage value="/resources/images/delete1616.png"/>
<f:setPropertyActionListener value="#{region}" target="#{regionsBean.forDelete}" />
</p:commandLink>
<p:tooltip id="toolTipDelete" for="deleteRegionLnk" value="Delete" showEffect="fade" hideEffect="fade" />
</p:column>
</p:dataTable>
</p:panel>
<p:confirmDialog id="dltDlg" message="You are about to delete the Region [#{regionsBean.forDelete.regionDescription}]. Proceed?" header="Delete Region" severity="alert" widgetVar="deleteRegionConfirm">
<p:commandButton id="confirm" value="Yes" styleClass="iot-button" update="regionsTable,growl" oncomplete="deleteRegionConfirm.hide()" actionListener="#{regionsBean.delete}" style="color: #FFF"/>
<p:commandButton id="decline" value="Cancel" styleClass="iot-button" onclick="deleteRegionConfirm.hide()" type="button" style="color: #FFF"/>
</p:confirmDialog>
在OWSAP中的响应:
如果你在这里看到上面的代码我正在插入警告&lt; .script&gt; confirm(1);&lt; ./ script&gt;。标签。
我尝试的解决方案:
1)过滤器正在处理请求而非响应。
2)使用了escape属性
3)标签内的内容安全策略(我使用的是mozila firefox)
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com;" />
先谢谢你的帮助。
答案 0 :(得分:3)
读了三遍之后,你这个相当复杂的问题归结为:
<p:confirmDialog message>
属性不会转义HTML,因此会打开潜在的XSS攻击漏洞。我该如何解决?
自PrimeFaces 3.5以来,这是known issue已经fixed。此外,<p:confirmDialog header>
具有also XSS易失性,自PrimeFaces 5.2 RC1以来仅为fixed。 PrimeFaces currently已作为5.3提供。所以,只需升级到最新版本,这个问题就会消失。
如果你真的无法升级,以下是你的选择:
<p:confirmDialog message>
中结束。只有当最终用户完全控制其价值时,它才会变得脆弱。或者,事先使用JSTL #{fn:escapeXml()}
函数自行逃避。
<p:confirmDialog message="#{fn:escapeXml(bean.message)}" />
升级到至少PrimeFaces 5.2后别忘了删除,否则会被双重转义。
要明确的是,JSF旨在为所有地方提供内置的XSS预防。当您在使用最新版本的JSF实现或JSF库时发现XSS漏洞时,这只是一个错误,您应该通过各种方式向JSF impl / library人员报告。另请参阅CSRF, XSS and SQL Injection attack prevention in JSF。
答案 1 :(得分:0)
message =“您即将删除区域[#{regionalBean.forDelete.regionDescription}]。继续?”
应该编码regionsBean.forDelete.regionDescription。你能自己注射吗? (没有OWASP工具?)