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

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.lqws.cn/news/187867.html

相关文章:

  • 山东大学《数据可视化》期末复习宝典
  • 怎么让大语言模型(LLMs)自动生成和优化提示词:APE
  • 在Markdown中使用MathType插入公式
  • next,react封装axios,http请求
  • Webhook 配置备忘
  • 浏览器工作原理06 [#]渲染流程(下):HTML、CSS和JavaScript是如何变成页面的
  • 基于Selenium+Python的web自动化测试框架
  • C++.OpenGL (3/64)着色器(Shader)深入
  • ceph 脚本,用于计算 rbd 文件存放 OSD 方法
  • 在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
  • MySQL 索引优化(Explain执行计划) 详细讲解
  • 阿里140 补环境日志
  • JS-- for...in和for...of
  • IDEA 中 Undo Commit,Revert Commit,Drop Commit区别
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • Python | Windows11通过离线方式安装pyserial
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题———————————————— 版权声明:本文为博
  • 艾体宝案例丨Transavia如何借助LambdaTest测试平台高效起飞?
  • 基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究
  • maven微服务${revision}依赖打包无法识别
  • Xsens-AAA工作室品质,为动画师准备
  • 深入浅出多路归并:原理、实现与实战案例解析
  • Blaster - Multiplayer P145-P152: 多种武器
  • 使用docker 安装Redis 带配置文件(x86和arm)版本
  • Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
  • ADI的BF609双核DSP怎么做开发,我来说一说(五)LAN口测试
  • 汽车免拆诊断案例 | 2010款捷豹XFL车制动警告灯、DSC警告灯异常点亮
  • LINUX 66 FTP 2 ;FTP被动模式;FTP客户服务系统
  • [蓝桥杯]搭积木
  • 【Zephyr 系列 11】使用 NVS 实现 BLE 参数持久化:掉电不丢配置,开机自动加载