java - Groovy Shell 沙箱最佳实践

标签 java groovy sandbox groovyshell

我正在尝试设置一个可以执行不受信任代码的 Groovy Shell 沙箱。这些不受信任的代码由最终用户(开发人员)作为行为配置提供,例如如何判断一个人是否高净值。所以,它们确实是主程序的一部分。我需要确保我不会受到任何不良代码的影响[例如无限循环]/hacks。

我知道这里有两件事在起作用:

  1. 提供运行时的 Java VM。
  2. 解释并执行代码的 Groovy Shell。

是否有沙盒 Groovy Shell 的最佳实践?

谢谢

最佳答案

我最终创建了一个策略文件。像这样的事情:

grant codeBase "file:/your jar file" {
  permission java.security.AllPermissions;
}

grant codeBase "file:/groovy/shell" {
}

grant codeBase "file:/groovy/script" {
}

当 Groovy 在解释模式下执行时,codeBase 是 file:/groovy/shellfile:/groovy/script。您可以为任一上下文授予特定权限。这些权限(或缺乏权限)与您为主程序授予的权限无关。

除了策略文件之外,还有许多其他考虑因素。

  1. 您在评估上下文中添加了什么内容?如果您放置第三方库,他们甚至可能没有适当的权限检查。

  2. 一些系统调用,例如System.out.println()也没有权限检查。所以,也许您还需要一个源代码检查器(Jenkins 就是这样做的)。

  3. 要限制 CPU,您可能需要在单独的线程中运行 Groovy 脚本。

  4. 您可能还想限制 Groovy 脚本可以导入的内容。这可以通过 Groovy ImportCustomizer 来实现。

我写了一篇文章:Secure Groovy Script Execution in a Sandbox总结我的发现。我希望它也能帮助其他人。

关于java - Groovy Shell 沙箱最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66069960/

相关文章:

iphone - 在 iPhone 沙箱中查找文件

java - 如何制作WebView stub : Web page not available?

java - future 预测支付金额计划

java - 从 Groovy 类创建 Spring bean 导致 "cannot find symbol error"

jenkins - 如何在 Jenkins Groovy 脚本控制台中获取环境变量?

macos - 带助手应用程序的沙盒应用程序

c - 如何创建一个轻量级的 C 代码沙箱?

Java - 具有多个客户端的服务器错误

java - Spring 2.5.1 和 Xfire 1.2.6 - NoSuchMethodError : <init>

grails - 为Grails安装Nimble