1

我有一个文本区域,我在其中放置了不允许<script>标记和 Javascript 标记的验证代码,但用户可以输入诸如<strong onmouseover=alert(2)>.

因此,当有人将鼠标悬停在此字符串标记上时,JS 警报框就会出现。

我怎样才能停止这种 javascript 注入?

4

3 回答 3

1

您需要正确清理您允许的 HTML。正如您所发现的,这并非微不足道。(您可能需要禁止iframe和其他几个元素。)

适当的清理需要一个元素的白名单,并且在这些白名单中每个元素都允许使用白名单。显然,各种onXyz属性不会在白名单上。

清理必须发生在服务器端,因为可以绕过任何客户端。因此,如果不知道您使用的是哪种服务器技术,就无法推荐某些东西。例如,JSoup是 Java 的一个众所周知的方法,但当然,如果您不使用 Java,它对您没有用处。:-) 对于 .Net,有HTML Agility PackMicrosoft Anti-XSS 库,但这是一个非常不完整的列表。

于 2012-05-25T09:23:13.210 回答
0

有很多工具称为 html 净化器。例如,你可以试试这个

于 2012-05-25T09:22:58.030 回答
0

简单的答案是replace(/</g,'&lt;');,但这当然会阻止使用任何HTML。这就是存在 BBCode、Markdown 和其他此类语言的原因:提供格式化功能而不授予用户发布任意代码的权限。

或者,只需搜索模式的东西/\bon[a-z]+=/i

于 2012-05-25T09:22:58.217 回答