我正在尝试沙箱 MVEL 表达式评估。不幸的是,默认情况下,MVEL 包含表达式语言中的所有 java.lang.* 类,因此用户可以调用“Runtime.exit()”并杀死整个系统。
如何排除我没有使用 addImport() 显式添加的所有类?
我无法确定变量解析器的正面或反面。
我正在尝试沙箱 MVEL 表达式评估。不幸的是,默认情况下,MVEL 包含表达式语言中的所有 java.lang.* 类,因此用户可以调用“Runtime.exit()”并杀死整个系统。
如何排除我没有使用 addImport() 显式添加的所有类?
我无法确定变量解析器的正面或反面。
据我所知,这是不支持的。
不久前,我在公司的一个项目中遇到了这种需求。我们不得不对 MVEL 进行相当大的更改,以引入一种配置自定义策略来控制对类型和方法的访问的方法。问题是您还可以通过其完全限定名称访问任何类,因此这不仅仅是删除默认导入的问题。不幸的是,我不拥有使其可用的代码。
ParserContext ctx = new ParserContext();
ctx.addImport("System", String.class);
ctx.addImport("Runtime", String.class);
您是否尝试过使用 AspectJ 来限制来自 MVEL 的这些调用?