语境:
在 Lua 中,创建一个新的 Lua VM 非常简单且非常便宜(4kb 内存)。因此,创建廉价的 lua“监狱”是微不足道的。然后,如果不受信任的代码行为不端,我就会杀死 Lua VM。
我知道https://github.com/Licenser/clj-sandbox但它似乎只是围绕 Java ......这将使不受信任的代码线程成为本机 Java 线程,然后我将无能为力。
问题:
无论如何要创建廉价/轻量级的 Clojure 监狱吗?
在 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 特定的东西)仍然可以防止危险代码在线程上运行。
总之,看看clojail。这可能是你需要的。它对于大多数用途来说已经足够了,并且是城里唯一的监狱游戏(除了没有维护的 clj-sandbox)。它并不总是最好的解决方案,但通常是最简单的。
如果 clojail 不能满足您的需求,下一步就是推出您自己的监禁机制,包括使用 JVM 沙箱和分离 JVM。这有很大的开销,所以如果可能的话,我会避免它。绝对不再是 4KB Luatown 了。;)