沙箱的Java / Groovy中/ Freemarker的代码 - 预防的具体方法执行
-
05-09-2019 - |
题
我正在开发一个系统,允许开发者上传自定义的Groovy脚本和FreeMarker的模板。
我可以在非常高的水平使用默认Java安全基础设施提供一定的安全级别 - 即防止代码从访问文件系统或网络,但是我有需要限制对特定方法
我的计划是修改Groovy和Freemarker的运行时间来读取注解,将任一白名单或黑名单的某些方法,然而,这将迫使我维持他们的代码,这是不期望分支版本。
所有我基本上需要能够做的是防止特定方法的执行在Groovy或Freemarker的调用时。我认为一个黑客会看看调用堆栈,但是这将是一个巨大的打击速度(和它相当混乱)。
有没有人有任何其他想法实现呢?
解决方案
您可以通过继承GroovyClassLoader和AST游客中强制执行的限制做到这一点。这篇文章介绍了如何做到这一点:的http:// hamletdarcy .blogspot.com / 2009/01 / Groovy的编译时 - 间magic.html
此外,代码中引用有在Groovy 1.6安装程序的样品夹。
其他提示
您应该看看该项目从kohsuke Groovy的沙箱。这里也看看他博客文章关于这个主题什么是溶液寻址:沙盒,但性能缺点
OSGi是非常适合于此。你可以划分你的代码成束,并正确地设定了每个束暴露,以及其他什么包。会为你工作?
您也可以考虑在Java的沙盒( HTTP://blog.datenwerke达网络/ p /所述-java的sandbox.html )最近开发的库,允许安全地从Java内执行不可信代码。
另请参见: HTTP://blog.datenwerke达网络/ 2013/06 /沙盒-常规与 - java的sandbox.html