上下文:
在 Lua 中,创建一个新的 Lua VM 既简单又便宜(4kb 内存)。因此,创建廉价的 lua“ jail ”是微不足道的。然后,如果不受信任的代码行为不当,我就会杀死 Lua VM。
我知道 https://github.com/Licenser/clj-sandbox但它似乎只是环绕 Java ...这将使不受信任的代码线程成为 native Java 线程,然后我将无法杀死它。
问题:
有没有办法创建廉价/轻量级的 Clojure jail ?
最佳答案
我是一个名为 clojail 的小库的(共同)作者。这是对 clj-sandbox 的重新思考。它还利用了 Java 沙箱,而且还提供了用于沙箱 Clojure 特定事物的功能。 tryclj和 4clojure利用它。
我不明白你剩下的是什么意思。 JVM 沙箱的伟大之处在于它可以阻止 I/O。 Clojail 通过允许超时来完成剩下的工作,以防止长时间运行代码。如果您所说的是“人们可以创建线程,而我无法杀死它们”,那么 clojail 会杀死在沙箱内创建的线程,并且通常会尽力防止杂散线程逃跑。 JVM 沙箱(以及 clojail 特定的东西)仍然可以防止危险代码在线程上运行。
总之,请查看 clojail。这可能就是您所需要的。它足以满足大多数用途,并且是镇上唯一一款用于 jail 的游戏(除了未维护的 clj-sandbox)。它并不总是最好的解决方案,但通常是最简单的。
如果 clojail 不能满足您的需要,下一步就是推出您自己的 jail 机制,其中包括使用 JVM 沙箱和分离 JVM。这会产生巨大的开销,所以如果可能的话我会避免它。绝对不再是 4KB Luatown 了。 ;)
关于Clojure:轻量级 jail ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960101/