上下文:
在Lua中,创建一个新的Lua VM是微不足道且非常便宜的(4kb内存)。因此,创建廉价的lua"监狱"是微不足道的。然后,如果不受信任的代码行为异常,我只需终止 Lua VM。
我知道 https://github.com/Licenser/clj-sandbox 但它似乎只是围绕着 Java......这将使不受信任的代码线程成为本机 Java 线程,然后我将无力杀死它们。
问题:
有没有办法制造廉价/轻量级的 Clojure 监狱?
我是一个名为 clojail 的小库的(合著者),它是对 clj-sandbox 的重新思考。它还利用了Java沙箱,但也提供了沙盒化Clojure特定事物的功能。Tryclj和4clojure利用了它。
我不明白你所说的其余部分是什么意思。JVM沙箱很棒,因为它可以防止I/O.Clojail通过允许超时来防止长时间运行的代码。如果你说的是"人们可以创建线程,而我无法杀死他们",clojail 会杀死在沙盒中创建的线程,并且通常会尽最大努力防止杂散线程逃跑。JVM沙箱(和clojail特定的东西)仍然阻止危险的代码在线程上运行。
总之,看看克洛加尔。这可能是你需要的。它足以满足大多数目的,并且是镇上唯一的监狱游戏(除了未维护的clj沙盒)。它并不总是最好的解决方案,但它通常是最简单的。
如果 clojail 没有做你需要做的事情,下一步是推出你自己的监禁机制,涉及使用 JVM 沙箱和剥离 JVM。这有很大的开销,所以如果可能的话,我会避免它。绝对不是在4KB的Luatown了。;)