欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > JavaSec-SPEL - 表达式注入

JavaSec-SPEL - 表达式注入

2025/10/25 14:26:43 来源:https://blog.csdn.net/2302_82243198/article/details/148429705  浏览:    关键词:JavaSec-SPEL - 表达式注入

简介

SPEL(Spring Expression Language):SPEL是Spring表达式语言,允许在运行时动态查询和操作对象属性、调用方法等,类似于Struts2中的OGNL表达式。当参数未经过滤时,攻击者可以注入恶意的SPEL表达式,从而执行任意代码 表达式语言/模板:表达式语言用于动态处理固定格式的内容,其中变量部分可以在运行时填入。模板可以将固定部分提取出来,方便模块化管理,动态填充变量内容

1.漏洞情景:原生漏洞场景

1、SpelExpressionParser.parseExpression()2、Expression.getValue()

public R vul(String ex) {// 创建SpEL解析器,ExpressionParser接口用于表示解析器,SpelExpressionParser为默认实现ExpressionParser parser = new SpelExpressionParser();// Expression expression = parser.parseExpression(ex);// String result =  expression.getValue().toString();// 构造上下文 上下文其实就是设置好某些变量的值,执行表达式时根据这些设置好的内容区获取值 在不配置的情况下具有默认类型的上下文EvaluationContext evaluationContext = new StandardEvaluationContext();// 解析表达式,将用户输入的字符串解析为Expression对象Expression exp = parser.parseExpression(ex);// 通过上下文计算表达式的值,并将结果转换为字符串String result = exp.getValue(evaluationContext).toString();return R.ok(result);
}

2.安全场景:使用SimpleEvaluationContext限制表达式功能

SimpleEvaluationContext不支持以下危险功能:Java 类型引用: 无法通过表达式引用Java类,从而防止调用静态方法构造函数调用: 不能通过表达式实例化新对象Bean 引用: 无法通过表达式访问Spring应用上下文中的bean

public R safe(String ex) {ExpressionParser parser = new SpelExpressionParser();// 使用 SimpleEvaluationContext 限制表达式功能(Java类型引用、构造函数调用、Bean引用),防止危险的操作EvaluationContext simpleContext = SimpleEvaluationContext.forReadOnlyDataBinding().build();Expression exp = parser.parseExpression(ex);String result = exp.getValue(simpleContext).toString();return R.ok(result);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词