【发布时间】:2011-03-12 13:01:22
【问题描述】:
如果我要创建一个用户可以将任意 html 放入他们的“个人资料”或类似内容的网站,我该如何阻止嵌入在该 html 中的 JavaScript 运行?
我可以在某处放置一个无限循环for(;;); 吗?如果是这样,我会把它放在哪里?
与此方法相关的其他安全问题是什么?
【问题讨论】:
标签: javascript security filter
如果我要创建一个用户可以将任意 html 放入他们的“个人资料”或类似内容的网站,我该如何阻止嵌入在该 html 中的 JavaScript 运行?
我可以在某处放置一个无限循环for(;;); 吗?如果是这样,我会把它放在哪里?
与此方法相关的其他安全问题是什么?
【问题讨论】:
标签: javascript security filter
嗯,无限循环只会挂起浏览器。
对于 PHP,我建议 HTML Purifier 通过只让好东西进入来阻止邪恶的 HTML :)
Python HTML Sanitizer 对于 Python 来说似乎也是一个不错的选择,尽管我还没有机会尝试它。 This StackOverflow question 使用 BeautifulSoup 提供了一些简单的 HTML sanitizer 解决方案,但请务必小心第一个答案 - 看起来它没有属性白名单,这对安全代码也很重要。
【讨论】:
您应该使用白名单方法。当您显示配置文件时,您应该首先对所有内容进行 HTML 编码,然后您可以从那里解码您允许的 HTML 元素。这样一来,只有您指定的特定元素和属性才可用,并且无法通过使用您没有想到的东西来隐藏任何代码。
【讨论】:
<style ...> 标签安全吗?如何防止人们添加 <div onclick="malicous()"> 之类的内容?