防弹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 。
- Groovy:使用JAX-B对象的特定属性创建一个Map
- 解决错误java.lang.NoSuchMethodError:org.codehaus.groovy.ast.ModuleNode.getStarImports()Ljava / util / List;
- Grails – 无法从Controller调用服务 – >总是得到“无法调用null对象上的方法错误”
- Java / Groovy中的Base64编码
- 在Groovy中使用递归嵌套映射合并映射
- 与Java的断言不同,Groovy是否对生产代码提出了一个好主意?
- 使用java中的groovy.util.AntBuilder
- 如何使用groovy将html模板作为邮件发送
- 使用spock数据表填充对象