java - 沙盒 Java/Groovy/Freemarker 代码 - 防止执行特定方法

标签 java security groovy sandbox freemarker

我正在开发一个允许开发人员上传自定义 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/

相关文章:

groovy - 使用poi.jar作为数据接收器脚本时出现Groovy编译错误

java - Android/Java 中奇怪的字符串数组行为

java - 使用迭代器删除时出现链接列表错误

java - 替换非静态方法java模拟

security - 如何保护 RESTful Web 服务 URI 中的密码参数?

java - 使用 Grails REST 重写 Java Controller 类

java - spring-boot 属性不是@Autowired

security - 代码签名 : When & Why?

javascript - 如何配置安全性以允许仅通过 nodejs 中的身份验证访问 swagger url

jenkins - 使用 Jenkins Pipeline 共享库上的版本