【问题标题】:Bullet-proof groovy script embedding防弹 groovy 脚本嵌入
【发布时间】:2011-09-06 19:00:37
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java security groovy embedding


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我认为这是要走的路。我将看看内置的定制器和转换器。如果有人预先构建了紧密的无限循环和内存消耗限制器,那就太棒了。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多