从html字符串清理所有脚本

时间:2015-02-03 14:42:28

标签: javascript html security xss sanitize

HTML5剪贴板很棒,但我正在寻找一种安全的方法。

用户将text / html粘贴到我的网页中。这允许他们粘贴图像,表格等。

我正在寻找一种方法从粘贴的内容中删除所有脚本,然后再添加到页面中。

我需要删除<script>元素,以及执行

等脚本的其他方法
<img src="x" onerror="alert('Hacked!')">

(和其他任何人)

想要删除样式元素或任何其他类型的元素。 (它们实际上是粘贴到iframe中,所以样式不会影响其他任何东西。)

2 个答案:

答案 0 :(得分:3)

您可以使用Google Caja之类的清理程序删除恶意JavaScript - 如果需要,您甚至可以use it to strip all JavaScript内容。

然而,我质疑你的目标。你的目标是防止自我XSS吗?除非您在某处输出HTML,否则对用户没有危险。如果您将HTML输出到同一用户,并且除了粘贴之外还有其他输入内容的方法,那么您应该确保保护页面免受CSRF的影响。这将阻止攻击者在当前用户的授权下插入自己的恶意JavaScript。

如果将HTML输出给其他用户,您可能希望清理内容服务器端。如果根本不允许HTML内容,那么您应该在输出时进行HTML编码,这样<script>标记将在浏览器中显示为<script>,而不是被浏览器解释为代码块。

如果您需要输出HTML,但没有脚本,则应该对服务器端进行清理,并且还应该实现Content Security Policy。使用正确的策略,您可以阻止内联脚本在现代浏览器中运行。 CSP将防止您选择的消毒剂中发现的任何未来错误对用户构成威胁。 Supported browsers are detailed here

您提到要支持样式 - 请注意CSS stylesheets can also contain code。这是Internet Explorer支持的概念(以及版本的FireFox)。但是,如果您禁止使用内联样式,则CSP应该阻止此操作。

答案 1 :(得分:0)

如果用户上传它以供其他人查看,则应使用带有已批准标记的白名单的PHP设置,并阻止他们上传JavaScript,否则他们无论如何都可以编辑它并且脚本变得无用。如果他们没有上传给别人看,你就不需要做任何事情,因为他们只会伤害自己。