Clojure:轻量级监狱 背景:

Clojure:轻量级监狱 背景:,clojure,jail,Clojure,Jail,在Lua中,创建一个新的luavm非常简单而且非常便宜(4kb内存)。因此,创建廉价的lua“监狱”是微不足道的。然后,如果不受信任的代码行为不当,我就杀死luavm 我知道,但它似乎只是围绕Java。。。这将使不受信任的代码线程成为本机Java线程,我将无力杀死它 问题: 有没有办法创建廉价/轻量级的Clojure监狱?我是一个叫做“那是对clj沙盒的一种反思”的小图书馆的作者之一。它还利用了Java沙盒,但也提供了沙盒Clojure特定事物的特性。并利用它 我不明白你说的其余的是什么意思。J

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

我知道,但它似乎只是围绕Java。。。这将使不受信任的代码线程成为本机Java线程,我将无力杀死它

问题: 有没有办法创建廉价/轻量级的Clojure监狱?

我是一个叫做“那是对clj沙盒的一种反思”的小图书馆的作者之一。它还利用了Java沙盒,但也提供了沙盒Clojure特定事物的特性。并利用它

我不明白你说的其余的是什么意思。JVM沙盒非常棒,因为它可以防止I/O。Clojail通过允许超时来防止长时间运行的代码。如果你说的是“人们可以创建线程,而我不能杀死他们”,那么clojail会杀死在沙箱中创建的线程,并且通常会尽最大努力防止散乱的线程跑掉。JVM沙盒(以及特定于clojail的东西)仍然可以防止危险代码在线程上运行

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


如果clojail不能满足您的需要,那么下一步就是推出您自己的监禁机制,包括使用JVM沙箱和剥离JVM。这有巨大的开销,所以我会尽量避免。绝对不会再出现在4KB卢阿敦了

我们创建一个线程组,以便在沙盒上下文中创建的任何线程都位于该组内,然后在评估完成或超时发生后杀死它们。这不适用于在线程池中创建的线程,这只是我们必须处理的事情,因此我们尝试阻止创建这些线程(创建这些类型的线程的将来和将来都会在沙盒中被列入黑名单)。您是否使用不推荐的停止来杀死线程组?如果是这样,你如何在不破坏虚拟机的情况下做到这一点?是的,因为没有太多其他选择。我不知道你破坏虚拟机是什么意思。我的想法是对代码进行沙箱处理,而不是正确地清理它。我的印象是thread.stop使JVM处于不干净/不稳定的状态。这似乎是一种(理论上的/学究式的)攻击;i、 长时间运行的线程->thread.stop->处于奇怪状态的JVM->利用漏洞。顺便说一句,我对这方面的了解比你少得多,所以这都是理论上的/我的无知。我从未见过JVM被停止的线程破坏的问题。有了沙箱,就没有太多可以变异的状态,因此也就没有太多可以破坏的日期了。:)