【问题标题】:SPEL how to protect against injection attacksSPEL如何防范注入攻击
【发布时间】:2021-12-17 13:45:44
【问题描述】:

类似这样的一些代码

    StandardEvaluationContext context = new StandardEvaluationContext();
    context.addPropertyAccessor(new EmptyValueMapAccessor());
    context.addPropertyAccessor(new MapAccessor());
    context.addPropertyAccessor(DataBindingPropertyAccessor.forReadOnlyAccess());
    ExpressionParser paser = new SpelExpressionParser();
    Expression expression = paser.parseExpression("#{T(java.lang.System).exit(0)}", new TemplateParserContext());
    expression.getValue(context,obj);

它将执行exit方法。

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java spring el spring-el


【解决方案1】:

请改用SimpleEvaluationContext - 它是专门为此目的而设计的。

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#expressions-evaluation-context

SimpleEvaluationContext 旨在仅支持 SpEL 语言语法的子集。它不包括 Java 类型引用、构造函数和 bean 引用。它还要求您明确选择对表达式中的属性和方法的支持级别。默认情况下,create() 静态工厂方法只允许对属性进行读取访问。您还可以获得构建器来配置所需的确切支持级别,针对以下一项或某种组合:

  • 仅限自定义 PropertyAccessor(无反射)
  • 只读访问的数据绑定属性
  • 用于读写的数据绑定属性

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2020-02-24
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2015-04-14
    相关资源
    最近更新 更多