2012-06-12 43 views
6

注:我很感激这一个标签的一些建议..允许用户编程语言中的沙盒版本

我想提供我的用户在编程处理数据的方法服务器。这可以通过使用浏览器内代码编辑器在稍后的日期执行,与https://www.onx.ms的使用方式不同。

我想避免编写一个DSL(采用的障碍?),并希望用户编写的语言是JavaScript或基于Ruby的语言。

我明显的担心是安全性。我了解允许用户生成的代码运行服务器端的风险,但我可以采取哪些措施来消除风险?

http://railsforzombies.com这样的网站实际上是使用irb,还是比这更简单?

回答

1

你会考虑Java(或其他JVM语言,如JRuby,Scala,Clojure等)吗?如果是这样 - 在JVM中有足够的权力来限制沙盒应用的权限。有关详细信息,请参阅此其他问题:How do I create a Java sandbox?

1

Google Caja可以让你安全地嵌入用户指定的在您的网站的Javascript,但我想可能是针对运行在用户的浏览器,而不是你的服务器上的代码。我自己并没有使用它。

我不知道是否有其他语言的现成解决方案,但我认为定制解决方案需要在删除允许用户写入磁盘的所有API库后自行重新编译解释器,打开网络连接, fork进程/线程,并执行任何其他危险或拒绝服务操作。列入白名单的“安全”库是唯一可行的方法。

如果您为单独的用户使用单独的虚拟服务器,将会更安全。

+0

Caja不会针对拒绝服务攻击提供沙箱。它没有针对运行永久'while(true){}'循环或分配大量内存的用户的防御。沙盒iframe中的Javascript与Caja具有相同的安全保证(并且缺少dos保护),同时使用起来更简单并且更加标准。 – AgentME