我计划在我的网站上有一个方面,用户可以在其中提交HTML,CSS和JS,然后将其“实时”生成到HTML的完整工作页面中。其他用户将能够看到这一点。这些页面需要有可用的Javascript。
我知道这本身就是一个非常重要的安全漏洞,但这个功能在网站上非常重要。我有这些想法:
eval()
)被动安全措施:
所以这就是问题:您如何看待这一点,作为安全计划?这些措施是否足以阻止攻击者?用户将在三个单独的输入中提交他们的代码 - CSS,HTML和JS - 所以我将能够相应地进行过滤和消毒,然后重新构建它“实时”以供其他人预览。
谢谢!
杰克
答案 0 :(得分:3)
听起来像一个计划,虽然我认为它的执行会很困难。
JavaScript是一种非常灵活的语言,可能无法自动过滤掉所有eval()
类似的结构。
还有很多方法可以从外部域获取脚本文件,这些文件很难说清楚。
可能需要手动审核大量代码。
专注于该想法的声誉方面(仅接受来自可信用户的可执行代码),并在与您登录的域分开的无cookie“沙箱”域上运行所有内容,这当然是个好主意。
总会有风险,但我不知道风险是如何比提供JavaScript的互联网上的任何其他网站更大。
答案 1 :(得分:3)
为用户提供的许多社交网络JavaScript提供支持的项目是Google Caja。这允许任何人在您的域中在安全沙箱中运行javascript。说实话,问题比你列出的问题多,而caja会为你照顾它。如果您想为用户提供HTML,而不是javascript,那么您应该使用HTML Purifier。但这只应该作为最后的手段使用,在大多数情况下你应该使用html实体编码。