Clojure:轻量级 jail

标签 clojure jail

上下文:

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

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

问题:

有没有办法创建廉价/轻量级的 Clojure jail ?

最佳答案

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

我不明白你剩下的是什么意思。 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/

相关文章:

image - 在没有临时磁盘文件的情况下调整 clojure 中的图像大小

loops - 为什么 Clojure 的范围只迭代 32 次?

C++:有办法到达 'jail function' 吗?

Linux VSFTPD : Jail a "Specific SFTP User" to its home?

clojure - 使 Clojure 的 defprotocol 与现有函数很好地(多态地)配合使用

clojure - 打印 “fully expanded form before evaluation” 的 Clojure 函数?

clojure - 如何获得一个持久的本地datomic数据库?

linux - 我有一个 jailed 用户,无法 ping 通主机名(仅限 IP 地址)

linux - 在 jail 环境中运行 Haskell 程序需要什么