5

我正在尝试沙箱 MVEL 表达式评估。不幸的是,默认情况下,MVEL 包含表达式语言中的所有 java.lang.* 类,因此用户可以调用“Runtime.exit()”并杀死整个系统。

如何排除我没有使用 addImport() 显式添加的所有类?

我无法确定变量解析器的正面或反面。

4

3 回答 3

3

据我所知,这是不支持的。

不久前,我在公司的一个项目中遇到了这种需求。我们不得不对 MVEL 进行相当大的更改,以引入一种配置自定义策略来控制对类型和方法的访问的方法。问题是您还可以通过其完全限定名称访问任何类,因此这不仅仅是删除默认导入的问题。不幸的是,我不拥有使其可用的代码。

于 2013-04-17T20:46:14.913 回答
1
ParserContext ctx = new ParserContext();

ctx.addImport("System", String.class);
ctx.addImport("Runtime", String.class);
于 2015-05-11T15:01:49.730 回答
0

您是否尝试过使用 AspectJ 来限制来自 MVEL 的这些调用?

于 2013-04-18T14:21:46.560 回答