我正在开发一个允许开发人员上传自定义 groovy 脚本和 freemarker 模板的系统。
我可以使用默认的 Java 安全基础结构在非常高的级别上提供一定级别的安全性 - 即防止代码访问文件系统或网络,但是我需要限制对特定方法的访问。
我的计划是修改 Groovy 和 Freemarker 运行时以读取将某些方法列入白名单或黑名单的注释,但这将迫使我维护他们代码的 fork 版本,这是不可取的。
我基本上需要做的就是在从 Groovy 或 Freemarker 调用时阻止执行特定方法。我考虑过一个可以查看调用堆栈的黑客攻击,但这将是一个巨大的速度打击(而且非常困惑)。
有没有人有任何其他实现这个的想法?
最佳答案
您可以通过子类化 GroovyClassLoader 并在 AST 访问者中强制执行您的约束来实现。这篇文章解释了如何做到这一点:http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html
此外,此处引用的代码位于 Groovy 1.6 安装程序的示例文件夹中。
关于java - 沙盒 Java/Groovy/Freemarker 代码 - 防止执行特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/728531/