【问题标题】:Sanitize all scripts from html string从 html 字符串中清理所有脚本
【发布时间】:2015-04-02 19:24:15
【问题描述】:

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

用户正在将文本/html 粘贴到我的网页中。这允许他们粘贴图像、表格等。

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

我需要删除<script> 元素,以及其他执行脚本的方式,例如

<img src="x" onerror="alert('Hacked!')">

(和任何其他人)

不想删除样式元素或任何其他类型的元素。 (它们实际上是粘贴到 iframe 中,因此样式不会影响其他任何内容。)

【问题讨论】:

  • 检查是否为字符串 -> 使用正则表达式查找
  • @MLB 这是一个非常幼稚的解决方案。
  • @MLB 因为普通的旧 &lt;script&gt; 标签不需要评估 JavaScript。 &lt;img onerror="alert('hacked')" src="/newp.jpg" /&gt;
  • 没错——你不需要保护你的用户免受他们自己的伤害,你只需要保护他们免受彼此的伤害。

标签: javascript html security xss sanitize


【解决方案1】:

您可以使用像 Google Caja 这样的消毒剂来删除恶意 JavaScript - 如果需要,您甚至可以使用 use it to strip all JavaScript 内容。

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

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

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

您提到要支持样式 - 请注意 CSS stylesheets can also contain code。这是 Internet Explorer 支持的概念(以及 版本的 FireFox)。但是,如果您不允许内联样式,您的 CSP 应该会阻止这种情况。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 2011-05-02
      • 1970-01-01
      • 2018-12-28
      • 2011-06-22
      相关资源
      最近更新 更多