当前位置: 首页 > ops >正文

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);
}

http://www.xdnf.cn/news/12304.html

相关文章:

  • 数据结构之常用排序算法(冒泡、选择等)
  • 使用 Docker Compose 部署 Jenkins(LTS 版)持续集成环境
  • uniapp 开发ios, xcode 提交app store connect 和 testflight内测
  • 学习STC51单片机29(芯片为STC89C52RCRC)
  • RabbitMQ 学习
  • Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错
  • 因泰立科技H1X激光雷达:因泰立科技为智慧工业注入新动力
  • 使用 Coze 工作流一键生成抖音书单视频:全流程拆解与技术实现
  • Python: 操作 Excel折叠
  • [蓝桥杯]矩阵翻硬币
  • 降雨预测系统(机器学习)
  • 知识图谱技术概述
  • 五子棋测试用例
  • 关于Web安全:8. Web 攻击流量分析与自动化
  • 基于大模型的 UI 自动化系统
  • JuiceFS v1.3-Beta2:集成 Apache Ranger,实现更精细化的权限控制
  • figma MCP + cursor如何将设计稿生成前端页面
  • WebDB:一款免费高效的数据库开发工具
  • 《深度体验 Egg.js:打造企业级 Node.js 应用的全景指南》
  • IDEA 中 Undo Commit,Revert Commit,Drop Commit区别
  • 「基于连续小波变换(CWT)和卷积神经网络(CNN)的心律失常分类算法——ECG信号处理-第十五课」2025年6月6日
  • android手势创建及识别保姆级教程
  • Ref vs. Reactive:Vue 3 响应式变量的最佳选择指南
  • Chrome 浏览器前端与客户端双向通信实战
  • 电脑开不了机,主板显示67码解决过程
  • C++_哈希表
  • 以STM32H7微控制器为例,简要说明stm32h7xx_it.c的作用
  • WebRTC 与 WebSocket 的关联关系
  • C# WPF 左右布局实现学习笔记(1)
  • 力扣刷题(第四十九天)