【问题标题】:What bad things can a user do in a browser without the script tag?用户在没有脚本标签的浏览器中可以做哪些坏事?
【发布时间】:2011-11-09 03:04:46
【问题描述】:

我有一个输入表单,用户可以在其中输入任意 HTML。除了脚本标签,我还需要过滤什么?这是我的工作:

userInput.replace(/<(script)/gi, "&lt;$1");

sanitizer of WMD(此处用于 SO)管理标签的白名单,并过滤掉(空白)所有其他标签。为什么?

我不喜欢白名单,因为我不想阻止用户输入任意标签,如果她愿意的话;但如果需要,除了“脚本”之外,我还可以使用更广泛的黑名单。我需要什么作为黑名单?

【问题讨论】:

标签: security user-input code-injection script-tag html-sanitizing


【解决方案1】:

简短的回答:他们可以做任何事情使用script 标签。

script 标签不是运行 javascript 所必需的。脚本也可以放在几乎每个 HTML 标签中。脚本可以出现在脚本标签之外的许多地方,包括但不限于用于 URL 的 srchref 属性、event handlersstyle 属性。

用户将不需要的脚本放入您的页面的能力是称为cross-site scripting 的安全漏洞。阅读此主题并阅读XSS prevention cheat sheet

您可能不想让用户将 HTML 添加到您的页面。如果您需要此功能,请考虑其他格式,例如允许您禁用任何嵌入式 HTML 的 Markdown;或者另一个不太安全的选项是使用过滤库来尝试删除所有脚本,例如 HTMLPurifier。如果您选择过滤选项,请务必订阅新版本的公告,并在发现和解决新漏洞时始终返回您的项目安装过滤器的错误修复版本。

【讨论】:

  • Markdown 允许 HTML,这就是重点(我在问题中提到的 WMD 是 SO 的 markdown 编辑器);所以使用 Markdown == 使用 HTML(在预览 mk 输入时)。
  • 最主要的是,从安全的角度来看,实施黑名单并不是一个好主意,因为从列表中缺少一个攻击向量意味着您仍然可以被利用。 HTMLPurifier 是一个维护良好的“黑名单”项目,旨在以您建议的方式解决此问题。看看那个项目中代码的大小,就知道这是hard。请注意,HTMLPurifier 在 2010 年和 2011 年被发现容易受到 XSS 攻击,并且对此进行了不断的研究和维护。 regilero 评论中的 XSS 备忘单显示了攻击向量的多样性。
  • 我从未真正认真地研究过 XSS(从我的问题中可能很明显 ;-),但仅阅读您链接到的 XSS 预防备忘单就很有趣。我看到黑名单是多么困难/不可能(因为攻击者的想象力是无限的)并将改为实施白名单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2011-01-16
  • 2010-10-28
  • 2013-08-15
  • 1970-01-01
相关资源
最近更新 更多