【问题标题】:Grails and dynamic modifications at runtimeGrails 和运行时的动态修改
【发布时间】:2011-06-29 09:28:31
【问题描述】:

可部署的 Grails 战争文件包含 groovy 文件以及 groovy.jar。

  • 部署应用程序时是否运行了 groovy 代理?
  • 是否可以在运行时通过 Groovy 对应用程序进行动态修改?
  • 如果是,如何预防?

编辑: 在 grails 应用程序战争部署之后,让我们说在 Tomcat 上:是否有某种 Groovy Shell/Process/Agent 正在运行,有权访问系统的人可以连接到?如果这是可能的,他能否在不触及文件系统上的任何文件的情况下对应用程序进行动态修改?

【问题讨论】:

  • 另外,什么样的修改?仅对 development 环境启用重新加载控制器/服务。不能禁用通过metaClass 进行的类修改(好吧,您可以使用Groovy++ 进行编译并严格键入每个类 - 这样就不会有任何动态调用)。但是即使在 Java 中也可以在运行时重新加载一个类(并加载修改后的版本),因此没有单一的方法可以“防止”每一种运行时修改。

标签: security grails groovy jvm


【解决方案1】:

您可以使用Console plugin,它提供了基于 Web 的 Groovy 控制台/Grails 控制台版本。与基于 Swing 的应用程序一样,它在范围内有一个 ctx 变量,可让您访问应用程序的所有 Spring bean,它会在您正在运行的 Web 应用程序的上下文中运行任意 Groovy 代码,可以访问 GORM 等。

显然这很危险,所以请务必使用security plugin 保护它

不久前我写了一篇关于使用类似的基于 Web 的控制台(我已将其合并到插件中)来修复正在运行的服务器中的错误的博文:http://burtbeckwith.com/blog/?p=155

【讨论】:

  • 这是否也意味着没有这个插件就无法执行任意 Groovy 代码?
  • 不,没有监听器/控制台/等。如果有,那将是一个重大的安全风险。这就是创建控制台和grails.org/plugin/remote-control 插件的原因。
  • 还有一个可能很愚蠢的问题:如果没有 groovy 控制台,与 grails 应用程序捆绑在一起的 groovy 文件如何执行?
【解决方案2】:

默认情况下,Grails 应用程序不附带允许您在运行时执行任意 Groovy 代码的控制台。

【讨论】:

  • 你有那个来源吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多