我一直在努力为AJAX请求找到跨边脚本的解决方案
这就是流程的方式:
1)屏幕上有一个文本框,我们正在使用RichEditor
2)在文本框中,您可以单击编辑按钮,该按钮显示一个新面板
3)单击后,新面板将打开,在新面板中,您可以编辑文本并更新它。
4)在新面板中有一个“继续”按钮,如果单击它将更新辅助bean中的文本,关闭新面板,并刷新原始面板中的文本区域。
单击继续单击onComplete时,它们会隐藏新面板或当前面板并重新呈现原始面板(有一个AJAX请求)。因此,当我们发送该请求时,我们的安全团队使用Paros Tool在其上插入恶意脚本(警报('XSS attack!'))。由于它是一个AJAX请求,并通过AJAX引擎获得响应,我无法弄清楚如何过滤或确保脚本不会运行,如果是坏脚本。
可能需要在AJAX响应后立即运行Javascript,但我不知道该怎么做。基本上我的目标是避免跨侧脚本,如果有人使用外部工具将恶意代码放入AJAX请求中。
我们正在使用JSF 1.2和RichFaces。
以下是原始面板的代码片段:
<tr valign="top">
<td><h:outputText styleClass="formLabel" value="Text:" /></td>
<td colspan="3">
<h:panelGroup styleClass="formTextMiddle" border="0" id="TextGroupFrom_aPanel">
<div class="editTemplateSmallScrollBar">
<ui:repeat value="#{backingBean.template.Parts}" var="part">
<a4j:commandLink ajaxSingle="true"
action="#{backingBean.editpart}"
rendered="#{part.widget}"
reRender="#{backingBean.panelName}Panel,#{backingBean.reRenderList}"
oncomplete="Richfaces.showModalPanel('#{backingBean.panelName}Panel',{top:200});">
<f:setPropertyActionListener value="#{part.generatedName}" target="#{backingBean.partName}" />
<h:graphicImage value="/img/#{part.image}" style="border:0" alt="#{part.generatedName}" />
</a4j:commandLink>
<h:outputText value="#{part.value}" escape="false" rendered="#{!part.widget}" />
</ui:repeat>
</div>
</h:panelGroup>
</td>
</tr>
以下是打开的新面板的代码段:
<h:panelGroup>
<a4j:commandButton styleClass="rich-button" align="right"
oncomplete="if (#{facesContext.maximumSeverity!='Error'}) {Richfaces.hideModalPanel('aPanel');reRenderTextFrom_aPanel();}"
value="Continue" action="#{backingBean.updateParts}">
</a4j:commandButton>
<a4j:jsFunction name="reRenderTextFrom_aPanel" reRender="TextGroupFrom_aPanel"></a4j:jsFunction>
</h:panelGroup>