HTML5剪贴板很棒,但我正在寻找一种安全的方法。
用户将text / html粘贴到我的网页中。这允许他们粘贴图像,表格等。
我正在寻找一种方法从粘贴的内容中删除所有脚本,然后再添加到页面中。
我需要删除<script>
元素,以及执行
<img src="x" onerror="alert('Hacked!')">
(和其他任何人)
我不想要删除样式元素或任何其他类型的元素。 (它们实际上是粘贴到iframe中,所以样式不会影响其他任何东西。)
答案 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,否则他们无论如何都可以编辑它并且脚本变得无用。如果他们没有上传给别人看,你就不需要做任何事情,因为他们只会伤害自己。