Jam*_*ies 6 java security groovy freemarker sandbox
我正在开发一个允许开发人员上传自定义groovy脚本和freemarker模板的系统.
我可以使用默认的Java安全基础架构在非常高的级别上提供一定级别的安全性 - 即阻止代码访问文件系统或网络,但是我需要限制对特定方法的访问.
我的计划是修改Groovy和Freemarker运行时以读取将某些方法列入白名单或将其列入黑名单的注释,但这会迫使我维护其代码的分叉版本,这是不可取的.
我基本上需要做的就是在从Groovy或Freemarker调用时阻止特定方法的执行.我已经考虑过一个可以查看调用堆栈的黑客,但这将是一个巨大的速度命中(并且它非常混乱).
有没有人有任何其他想法来实现这个?
您可以通过继承GroovyClassLoader并在AST访问者中强制执行约束来实现.这篇文章解释了如何做到这一点:http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html
此外,引用的代码位于Groovy 1.6安装程序的samples文件夹中.