我正在尝试设置一个可以执行不受信任代码的 Groovy Shell 沙箱。这些不受信任的代码由最终用户(开发人员)作为行为配置提供,例如如何判断一个人是否高净值。所以,它们确实是主程序的一部分。我需要确保我不会受到任何不良代码的影响[例如无限循环]/hacks。
我知道这里有两件事在起作用:
- 提供运行时的 Java VM。
- 解释并执行代码的 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/shell
或 file:/groovy/script
。您可以为任一上下文授予特定权限。这些权限(或缺乏权限)与您为主程序授予的权限无关。
除了策略文件之外,还有许多其他考虑因素。
您在评估上下文中添加了什么内容?如果您放置第三方库,他们甚至可能没有适当的权限检查。
一些系统调用,例如
System.out.println()
也没有权限检查。所以,也许您还需要一个源代码检查器(Jenkins 就是这样做的)。要限制 CPU,您可能需要在单独的线程中运行 Groovy 脚本。
您可能还想限制 Groovy 脚本可以
导入
的内容。这可以通过 GroovyImportCustomizer
来实现。
我写了一篇文章:Secure Groovy Script Execution in a Sandbox总结我的发现。我希望它也能帮助其他人。
关于java - Groovy Shell 沙箱最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66069960/