【问题标题】:Disable Javascript in user-submitted html在用户提交的 html 中禁用 Javascript
【发布时间】:2011-03-12 13:01:22
【问题描述】:

如果我要创建一个用户可以将任意 html 放入他们的“个人资料”或类似内容的网站,我该如何阻止嵌入在该 html 中的 JavaScript 运行?

我可以在某处放置一个无限循环for(;;); 吗?如果是这样,我会把它放在哪里?

与此方法相关的其他安全问题是什么?

【问题讨论】:

标签: javascript security filter


【解决方案1】:

嗯,无限循环只会挂起浏览器。

对于 PHP,我建议 HTML Purifier 通过只让好东西进入来阻止邪恶的 HTML :)

Python HTML Sanitizer 对于 Python 来说似乎也是一个不错的选择,尽管我还没有机会尝试它。 This StackOverflow question 使用 BeautifulSoup 提供了一些简单的 HTML sanitizer 解决方案,但请务必小心第一个答案 - 看起来它没有属性白名单,这对安全代码也很重要。

【讨论】:

  • 看起来像一个很棒的图书馆。其他语言(如 python)中有哪些等价物?
  • @colinmarc - 你知道,几分钟前我开始查找 Python 替代品后,我发现几个月前的 my own answer xD 链接在几秒钟内添加。
【解决方案2】:

您应该使用白名单方法。当您显示配置文件时,您应该首先对所有内容进行 HTML 编码,然后您可以从那里解码您允许的 HTML 元素。这样一来,只有您指定的特定元素和属性才可用,并且无法通过使用您没有想到的东西来隐藏任何代码。

【讨论】:

  • ...我认为这是正确的,并注意这样做并不是一件容易的事。以几天前的 YouTube 崩溃为例,说明为什么应该防止跨站点脚本攻击!
  • <style ...> 标签安全吗?如何防止人们添加 <div onclick="malicous()"> 之类的内容?
  • 白名单不仅应包括安全标签,还应包括安全属性。 HTML Purifier 清除了不安全的属性,我认为它也可以清除不安全的 CSS(CSS 有时可以用来执行 Javascript),但这需要配置。
  • @colinmarc:您可以将 Javascript 表达式放在样式标签中,这将由 Internet Explorer(版本 8 除外)执行,因此您不能只允许样式标签中的任何内容。为了防止在标签中使用事件,您只需指定每个标签中允许的属性。
猜你喜欢
  • 2017-10-10
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多