防弹groovy脚本嵌入



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

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

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

  • 启动一个新的JVM。围绕Runtime.exec创建一个ScriptProcess包装器,并使用安全管理器、有限堆等生成一个新的JVM。因为我们启动了一个全面的进程,我们可能会对监控行为不好的进程获得更多的控制?然而,资源成本将是可怕的。。。另一种选择是在这里使用Ant,但它是可扩展的吗?

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

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

另一种可能性是在运行嵌入式脚本的GroovyShell上使用Groovy1.8编译自定义程序。您可以预导入类和方法,限制GroovyAST的使用,并预应用AST转换,如@ThreadInterrupt、@TimedInterrupt或@ConditionalInterrupt。详细信息:

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

您应该了解kohsuke的groovy沙箱项目。还可以看看他关于这个主题的博客文章,以及解决方案是什么:沙箱,但性能缺陷。

还可以看看java沙箱项目和附带的博客文章http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html.

最新更新