我有一个文本区域,我在其中放置了不允许<script>
标记和 Javascript 标记的验证代码,但用户可以输入诸如<strong onmouseover=alert(2)>
.
因此,当有人将鼠标悬停在此字符串标记上时,JS 警报框就会出现。
我怎样才能停止这种 javascript 注入?
我有一个文本区域,我在其中放置了不允许<script>
标记和 Javascript 标记的验证代码,但用户可以输入诸如<strong onmouseover=alert(2)>
.
因此,当有人将鼠标悬停在此字符串标记上时,JS 警报框就会出现。
我怎样才能停止这种 javascript 注入?
您需要正确清理您允许的 HTML。正如您所发现的,这并非微不足道。(您可能需要禁止iframe
和其他几个元素。)
适当的清理需要一个元素的白名单,并且在这些白名单中每个元素都允许使用白名单。显然,各种onXyz
属性不会在白名单上。
清理必须发生在服务器端,因为可以绕过任何客户端。因此,如果不知道您使用的是哪种服务器技术,就无法推荐某些东西。例如,JSoup是 Java 的一个众所周知的方法,但当然,如果您不使用 Java,它对您没有用处。:-) 对于 .Net,有HTML Agility Pack或Microsoft Anti-XSS 库,但这是一个非常不完整的列表。
有很多工具称为 html 净化器。例如,你可以试试这个。
简单的答案是replace(/</g,'<');
,但这当然会阻止使用任何HTML。这就是存在 BBCode、Markdown 和其他此类语言的原因:提供格式化功能而不授予用户发布任意代码的权限。
或者,只需搜索模式的东西/\bon[a-z]+=/i