Clojure:轻量级监狱

时间:2012-06-09 10:08:05

标签: clojure jail

上下文:

在Lua中,创建一个新的Lua VM非常简单且非常便宜(4kb的内存)。因此,创造廉价的lua“jails”是微不足道的。然后,如果不受信任的代码行为不端,我就会杀死Lua VM。

我知道https://github.com/Licenser/clj-sandbox但它似乎只是围绕Java ...这会使不受信任的代码线程成为本机Java线程,然后我就无力杀死它。

问题:

无论如何要创造便宜/轻量级的Clojure监狱?

1 个答案:

答案 0 :(得分:3)

我是一个名为clojail的小型库的(合着)作者,它重新思考了clj-sandbox。它还使用了Java沙箱,但也提供了沙盒特定于Clojure的功能。 tryclj4clojure使用它。

我不明白你的意思是什么意思。 JVM沙箱非常棒,因为它可以防止I / O. Clojail通过允许超时来防止长时间运行的代码。如果您所说的是“人们可以创建线程并且我无法杀死它们”,那么clojail会杀死沙箱内部创建的线程,并且通常会尽力防止杂散线程逃跑。 JVM沙箱(以及特定于clojail的东西)仍然可以防止危险代码在线程上运行。

总之,请查看clojail。它可能是你需要的。它足以满足大多数目的,并且是jail中唯一的游戏(除了没有维护的clj-sandbox)。它并不总是最好的解决方案,但它通常是最简单的。

如果clojail不能满足您的需求,那么下一步就是推出自己的jail机制,该机制涉及使用JVM沙箱和分离JVM。这有大量的开销,所以如果可能的话,我会避免它。绝对不再是4KB Luatown了。 ;)