Javascript jQuery don';t在.HTML()方法中解析转义的HTML

Javascript jQuery don';t在.HTML()方法中解析转义的HTML,javascript,jquery,html,xss,sanitization,Javascript,Jquery,Html,Xss,Sanitization,以这个HTML为例: <td onclick="$(this).html('Wanted HTML: <br>; Unwanted HTML: &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;')"> Click to Show</td> 点击显示 如您所见,我已经(使用PHP)将不需要的HTML转义到实体中。但是,当您单击该框时,它将执行JavaScrip

以这个HTML为例:

<td onclick="$(this).html('Wanted HTML: <br>; Unwanted HTML: &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;')">
Click to Show</td>

点击显示
如您所见,我已经(使用PHP)将不需要的HTML转义到实体中。但是,当您单击该框时,它将执行JavaScript

如果我将
.html
更改为
.text
,它也会按字面意思显示换行符


如何让它在单击框时将

显示为换行符,而将
显示为小于或大于符号?

问题是,在到达JavaScript函数之前,您的字符正在
onclick
中解码

你需要双重编码。所以你的例子是:

<td onclick="$(this).html('Wanted HTML: &lt;br&gt;; Unwanted HTML: &amp;lt;script&amp;gt;alert(&amp;#39;xss&amp;#39;)&amp;lt;/script&amp;gt;')">
    Click to Show
</td>

点击显示
请注意,我对您想要的标记进行了编码(单编码)。我还在第一个
上添加了缺少的分号


当然,更好的解决方案是将其从HTML中完全删除。大多数开发人员都同意JavaScript是用于交互的,HTML是用于内容的,他们应该尽可能少地混合(JavaScript通过调用(如
addEventHandler
)与内容挂钩)

这段代码应该做什么?你为什么试图从其他JavaScript输出JavaScript?@woz我认为这是有人入侵其表单输入的一个例子。当你点击它时,它应该替换td的内容(
onclick=“$(this).html('
…)。重点是我试图使它不从其他JavaScript输出JavaScript-这就是它目前正在做的。哦,我明白了。对不起,我错过了XSS标记。这个例子是缩写的-我实际使用的方式是TD有大量的文本,因此它缩短了它,让你点击它扩展到整个消息。@DuncanNZ则更好(或至少更纯净)解决方案是有一个包含完整内容的隐藏div,以及一个通用JavaScript函数,该函数将指定区域的短div替换为长divinstead@DuncanNZ请注意,您的代码也容易出现反斜杠错误。例如,如果用户以反斜杠结束输入,则输入将无效。或者恶意程度较低:内容中的反斜杠将消失。因此,为了安全起见,如果保留此方法,您还需要
addslashes
。是的,我也使用了
addslashes
。但我将改为div方法-我知道为什么会更好。