我正在开发一个允许开发人员上传自定义groovy脚本和freemarker模板的系统。
我可以使用默认的Java安全基础架构在非常高的级别上提供一定级别的安全性-即阻止代码访问文件系统或网络,但是我需要限制对特定方法的访问。
我的计划是修改Groovy和Freemarker运行时,以读取会将某些方法列入白名单或黑名单的注释,但是这将迫使我维护他们的代码的派生版本,这是不可取的。
实际上,我需要做的就是防止在从Groovy或Freemarker调用特定方法时执行这些方法。我曾考虑过一种查看调用堆栈的黑客攻击,但这将是一个巨大的速度冲击(而且相当混乱)。
有没有人有其他想法来实现这一点?
发布于 2009-04-09 15:43:13
您可以通过将GroovyClassLoader子类化并在AST Visitor中强制执行您的约束来完成此操作。THis帖子解释了如何做到这一点:http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html
此外,这里引用的代码位于Groovy1.6安装程序的samples文件夹中。
发布于 2012-05-22 20:19:42
你应该看看高辅的groovy-sandbox项目。也可以看看他在这个主题上的blog post here,解决方案是什么:沙箱,但性能缺陷。
发布于 2009-04-08 04:59:36
OSGi在这方面做得很好。您可以将代码划分为多个包,并准确设置每个包公开的内容以及其他包公开的内容。这对你有用吗?
https://stackoverflow.com/questions/728531
复制相似问题