防弹groovy脚本嵌入

时间:2011-06-02 03:26:06

标签: java security groovy embedding

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

您应该查看来自kohsuke的项目groovy-sandbox。 另请参阅his blog post here关于此主题以及解决方案正在解决的问题:沙盒,但性能缺陷。

答案 2 :(得分:0)