2010-03-26 88 views
0

也许这不是真的可行。但基本上,我一直在开发一个片段共享网站,我希望它有一个“现场演示区”。用户提交代码的安全防范措施和技巧演示区

例如,您正在浏览一些片段并单击演示按钮。弹出一个执行网页代码的新窗口。

我知道有参与这样一个极大的安全隐患 - 通过下载,pr0n,XSS,标签,讨厌的恶意软件/驱动器等等,等等等等

社区将能够是标志意见书公然调皮,但显然有些不会被发现(并且在很多情况下,有人必须成为受害者才能发现任何讨厌的东西被提交)。

所以我需要知道: 我应该做什么 - 安全明智 - 确保用户可以提交代码,但没有恶意可以运行 - 或执行异地等?

为了您的信息,我的网站是由PHP使用CodeIgniter。

杰克

+1

片段是否完全是Javascript? – Iraklis 2010-03-26 18:49:17

+1

如果您想要真正的安全性,您必须开发一种技术,将您知道“安全”的代码列入白名单。 – 2010-03-26 18:55:28

回答

1

弗兰克指出,如果你想保持高安全级别使用白名单技术。这当然有一个价格(可能太严格,难以实施)。

另一种方法是开发黑名单技术。即只允许没有触发任何铃声的代码。这很容易,因为你必须指定更少的东西,但它不会捕获新的漏洞。

网络上有很多关于这两种技术的信息。

依赖于CodeIgniters安全功能(XSS过滤等)不会让你感觉很远,因为大部分代码片段都不被允许通过。

不管你做什么,你一定要记住这一点:

不要以为恶意代码的目标将只是伤害你的网站的访客。它可能会通过你的解析器/代码检查器来破坏你的服务器。例如,可以说Alice上传了片段foo。 Alice有意识地使用该片段,以便解析器将由于XSS漏洞利用而将其标记为恶意。假设您的解析器还会使用恶意代码更新数据库以供进一步调查。 Alice知道这一点。随着XSS漏洞利用Alice在代码片段中注入了一些SQL代码,这样当你将代码片段插入数据库时​​,它会做各种不好的事情。

如果你真的是偏执狂,你可以有一个孤立的服务器,它的唯一责任就是检查代码片段。因此,在WCS中,只有低风险的服务器会受到影响,并且您(希望)有足够的时间来修复/审计情况。

希望这会有所帮助。

0

为了您的信息,我的网站是由PHP驱动使用笨

对不起杰克,如果你认为这是在毫厘有关你从了解任何有效的答案很长的路要走问题 - 更不用说能够区分无效的问题。

您创建的任何沙箱都会阻止某人攻击您的计算机或您的客户,因此这些沙箱限制性很强,您的客户将无法做得比“打印”更多。

你需要在一个自定义的chroot jail上运行一个suhosin的CLI版本 - 并且为每个脚本单独提供独立的环境将是完全不切实际的。

C.

0

假设你只允许JavaScript代码,那么你应该做到以下几点 -

  1. 购买是无法识别您的域扔掉的域名
  2. 即成用户在一次性域名托管的iframe中输入的代码

这实质上就是iGoogle所做的。它会阻止XSS,因为您使用的是不同的域。我知道的唯一漏洞是邪恶的代码可以改变网页的位置。

如果你打算分享服务器端代码片段,那么它是一个不同的球赛。对于java/jsp片段,您可以使用JVM的内部安全类在沙箱中运行代码。如果你是谷歌,你应该找到很多关于这方面的信息。我想这是谷歌在App Engine中使用的(我不确定)。

除了Java以外的任何东西,我不确定如何保护。 Dot Net也许有一个类似的概念,但我怀疑你可以以类似的方式沙盒PHP代码片段。

1

你不能白名单或黑名单PHP,它只是不起作用。如果你写了,我可以使用,或阻止我使用恶意功能的命令列表,是什么阻止我从写作:

$a = 'mai'; 

{$a .'l'}('[email protected]', 'You suck', 'A dodgy message sent from your server'); 

不能白名单或黑名单PHP。