0

如果 ESAPI,Encoder.encodeForJS(Encoder.encodeForHTML(untrustedData))在向客户端发送响应之前对 html 内容执行 HTML 和 Javascript 编码以防止 XSS(使用 )。如何在 javascript 中处理这些 HTML 和 Javascript 编码数据?

在 element.innerHTML 中使用服务器输出之前,我是否必须规范化数据。

例如,

var data = $ESAPI.encoder().canonicalize(serverOP); 

element.innerHTML=data;

但是使用混合或多重编码规范化数据将引发异常(入侵异常)。

4

1 回答 1

0

在这种情况下,服务器首先中和 HTML,然后中和要传递给 javascript 函数的数据。

您要定位的 javascript 函数是否应该处理 HTML?

如果您为 HTML 编码,然后为 javascript 编码,则需要先ESAPI.encoder().decodeForJavascript(payload)调用ESAPI.encoder().decodeForHtml(payload)

规范化旨在用于处理来自不受信任来源的数据,而不是一站式解码功能。

此外,如果您知道您的 javascript 函数是此数据的唯一入口点,则您不必为 html 转义,只需为 javascript 转义...我这样说是因为“innerHTML”表示您打算让浏览器渲染您发送的内容,因此您在这里通过添加不必要的解码步骤来做额外的工作。


我想补充一点:如果服务器正在传递旨在传递给 javascript 的转义数据,那么您不会希望在使用它之前对其进行解码。

于 2014-12-18T13:57:37.957 回答