防弹groovy脚本嵌入

我正在开发一个服务器应用程序,可以通过用户提供的Groovy脚本进行扩展。 很明显,我想确保这些脚本在非常紧凑的沙箱中运行,它们不会破坏核心应用程序代码或消耗太多资源来使服务器过载。

我已经研究了各种可能性,最终的解决方案可能是这些的组合:

  • 在非常有限的安全管理器中运行脚本 。 该脚本在无权限的SecurityManager中运行。 必须声明其他权限(如Android)。

  • 启动一个新的JVM 。 在Runtime.exec周围创建一个ScriptProcess包装器,并使用安全管理器,有限堆等生成新的JVM。因为我们启动了一个完整的流程,我们可能会对监视器的不良行为进行更多控制? 虽然资源成本很可怕……另一种方法是在这里使用Ant,但它是否可以扩展?

  • Java Monitor API在Java 6中,有一个具有监视能力的包。 我们可以监视线程,也可以检测无限循环和内存消耗。 有人用过吗?

这些是我今天想到的。 确保这些脚本正常运行并保持一定的可伸缩性和性能的最佳方法是什么?

另一种可能性是在运行嵌入式脚本的GroovyShell上使用Groovy 1.8编译定制器。 您可以预先导入类和方法,限制使用Groovy AST,并预先应用AST转换,例如@ThreadInterrupt,@ TimedInterrupt或@ConditionalInterrupt。 详细信息:

http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

你应该看看kohsuke的项目groovy-sandbox 。 还可以看看他在这篇主题上的博客文章以及解决方案正在解决的问题:沙盒,但性能缺陷。

另请参阅java-sandbox项目和随附的博客文章http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html 。