Java-Sec-Code SpEL 代码审计

本文介绍了Spring Expression Language (SpEL)的运行机制及其潜在的安全风险,特别是在代码审计中发现的表达式注入漏洞。文章讨论了StandardEvaluationContext和SimpleEvaluationContext的区别,指出在未指定EvaluationContext时,默认使用StandardEvaluationContext可能导致执行任意Java代码。通过升级spring-expression库至5.2.6 RELEASE并使用SimpleEvaluationContext,可以限制用户输入的权限,防止远程代码执行。最后,文章提到了修复此类问题的方法,并推荐了相关学习资源。
摘要由CSDN通过智能技术生成

一、什么是 SpEL

Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持 运行时 查询和操作对象图 。SpEL 可以独立于 Spring 容器使用,但只是被当作成简单的表达式语言来使用。在未对用户的输入做严格的检查,以及错误使用 Spring 表达式语言时,就有可能产生表达式注入漏洞。

  • SpEL执行过程: 字符串 -> 语法分析 -> 生成表达式对象 -> (添加执行上下文) -> 执行此表达式对象 -> 返回结果
  • 表达式(“干什么”):SpEL 的核心,所以表达式语言都是围绕表达式进行的
  • 解析器(“谁来干”):用于将字符串表达式解析为表达式对象
  • 上下文(“在哪干”):表达式对象执行的环境,该环境可能定义变量、定义自定义函数、提供类型转换等等
  • root根对象及活动上下文对象(“对谁干”):root根对象是默认的活动上下文对象,活动上下文对象表示了当前表达式操作的对象

二、StandardEvaluationContext 和 SimpleEvaluationContext

在 SpEL 中,EvaluationContext 是用于评估表达式和解析属性、方法以及字段并蚌住执行类型转换的接口。该接口有两种实现,分别为 SimpleEvaluationContext 和 StandardEvaluationContext
在 默认情况下使用 S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值