2

语境:

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

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

问题:

无论如何要创建廉价/轻量级的 Clojure 监狱吗?

4

1 回答 1

3

我是一个名为clojail的小库的(共同)作者,它是对 clj-sandbox 的一种重新思考。它还利用了 Java 沙箱,还提供了沙箱化 Clojure 特定事物的功能。tryclj4clojure使用它。

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

总之,看看clojail。这可能是你需要的。它对于大多数用途来说已经足够了,并且是城里唯一的监狱游戏(除了没有维护的 clj-sandbox)。它并不总是最好的解决方案,但通常是最简单的。

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

于 2012-06-09T10:22:41.307 回答