在javascript中使用ESAPI处理HTML和Javascript编码数据

时间:2014-12-17 07:35:45

标签: xss esapi

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

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

e.g,

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

element.innerHTML=data;

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

1 个答案:

答案 0 :(得分:-1)

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

您定位的javascript功能是否应该处理HTML?

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

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

此外,如果您知道您的javascript函数是此数据的唯一入口点,那么您不应该为html转义,只是为javascript转义...我说这是因为" innerHTML&# 34;表示您打算让浏览器呈现您要发送的内容,因此您可以通过添加不必要的解码步骤来执行额外的工作。


我想补充一点:如果服务器正在传递要传递给javascript的转义数据,那么在使用之前你不想解码它。