让用户使用某个编程语言的沙盒版本

7
注意:我希望这篇文章能够提供一些标签建议。
我想为我的用户提供一种在服务器上以编程方式操作数据的方法。这可以通过使用浏览器内置代码编辑器来实现,稍后执行,与https://www.onx.ms所采用的方式类似。
我希望避免编写DSL(这将成为一个障碍),并且希望用户编写的语言是基于JavaScript或Ruby的。
我首要关注的是安全性。我了解允许用户生成的代码在服务器端运行的危险,但是我可以采取哪些措施来消除风险?
http://railsforzombies.com这样的网站是否真的使用irb,还是比那更简单?
2个回答

1

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

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

如果您为每个用户拥有单独的虚拟服务器,则会更安全。


Caja无法防范拒绝服务攻击。它对用户运行永久的while(true){}循环或分配大量内存没有任何防御措施。在沙盒中的iframe中的Javascript具有与Caja相同的安全保证(以及缺乏dos保护),同时更易于使用和更标准化。 - Macil

1
你会考虑使用Java(或其他JVM语言,如JRuby、Scala、Clojure等)吗?如果是这样的话,JVM中有丰富的功能可以限制沙盒应用程序的权限。请参阅此其他问题以获取详细信息:如何创建Java沙盒?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接