总结:该<p:confirmDialog message>
属性不会转义 HTML,从而打开一个潜在的 XSS 攻击漏洞。我该如何解决?
下面的原始问题(原标题是:XSS Attacks : How to prevent Script injection in Response of application):
我正在使用 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 中的响应:
如果您在这里看到上面的代码,我将插入警报 <.script>confirm(1);<./script>。标签。
我尝试的解决方案:
1)过滤器适用于请求而不是响应。
2) 使用转义属性
3)标签内的内容安全策略(我使用的是mozila firefox)
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com;" />
感谢您提前提供帮助。