'清理'用户提交的Javascript - 所以它仍然有效!

时间:2010-08-05 09:07:52

标签: javascript security

我计划在我的网站上有一个方面,用户可以在其中提交HTML,CSS和JS,然后将其“实时”生成到HTML的完整工作页面中。其他用户将能够看到这一点。这些页面需要有可用的Javascript。

我知道这本身就是一个非常重要的安全漏洞,但这个功能在网站上非常重要。我有这些想法:

  • 无法将外部Javascript文件链接到
  • 可以包含jQuery等,但仅限于受信任的CDN(例如Google)
  • 某些Javascript功能将被停用并删除(例如eval()
  • 用户在获得一定数量的“声誉”之前无法提交实时演示代码
  • 用户提交的现场演示代码必须经过管理员授权才能上线
  • 不得使用缩小代码

被动安全措施:

  • 免责声明,所以我们不承担任何责任! ;)
  • '报告'按钮,以防用户发现狡猾的东西

所以这就是问题:您如何看待这一点,作为安全计划?这些措施是否足以阻止攻击者?用户将在三个单独的输入中提交他们的代码 - CSS,HTML和JS - 所以我将能够相应地进行过滤和消毒,然后重新构建它“实时”以供其他人预览。

谢谢!

杰克

2 个答案:

答案 0 :(得分:3)

听起来像一个计划,虽然我认为它的执行会很困难。

  • JavaScript是一种非常灵活的语言,可能无法自动过滤掉所有eval()类似的结构。

  • 还有很多方法可以从外部域获取脚本文件,这些文件很难说清楚。

  • 可能需要手动审核大量代码。

专注于该想法的声誉方面(仅接受来自可信用户的可执行代码),并在与您登录的域分开的无cookie“沙箱”域上运行所有内容,这当然是个好主意。

总会有风险,但我不知道风险是如何比提供JavaScript的互联网上的任何其他网站更大。

答案 1 :(得分:3)

为用户提供的许多社交网络JavaScript提供支持的项目是Google Caja。这允许任何人在您的域中在安全沙箱中运行javascript。说实话,问题比你列出的问题多,而caja会为你照顾它。如果您想为用户提供HTML,而不是javascript,那么您应该使用HTML Purifier。但这只应该作为最后的手段使用,在大多数情况下你应该使用html实体编码。