2

我想在页面中显示用户提供的 html。我的页面几乎是完全动态的(JS 代码),我想知道是否有一种简单的方法来清理它?

就像,也许我可以删除所有<script><iframe>标签并取消绑定字符串中包含的所有事件(或删除任何以'on'开头的html属性),以便不执行任何可能执行的字符串中的javascript代码?

用户可以在样式属性中插入带有 css 'content' 属性的 javascript 吗?

jquery$(...).text(...)函数对我没有帮助,因为我想保留任何 html 标记或 css 样式。

如果没有简单的解决方案,我已经准备好接受 html 标签的白名单(table span div img a b u i strong...),但我也不想将属性列入白名单。

4

1 回答 1

4

安全地显示用户内容的更简单的方法是将其嵌入到 iframe 中,该 iframe 的来源与您的主机网页不同。这就是 jsFiddle 所做的。主页由 jsfiddle.net 提供,但用户脚本由 fiddle.jshell.net 提供。这让用户内容可以做它通常会做的事情,但是浏览器的跨域保护可以防止用户内容与主机页面或域或 cookie 等混淆......

试图去除脚本可能在内容中的所有可能位置是一个冒险的提议,您可能会永远追逐新的攻击向量。我个人更愿意让浏览器从事该业务并将用户内容放在不同的域中。另外,允许用户内容拥有它的正常 JS 也会让它按需要工作。

于 2012-12-15T18:20:40.680 回答