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

springboot项目xml中#{}和${}

两者本质区别

  • ${params.id}:MyBatis 直接字符串替换,把值原样拼进 SQL。相当于字符串拼接。
  • #{params.id}:MyBatis 用 PreparedStatement 预编译占位符 ?,值由驱动单独传参,和 SQL 语句分离。

数字类型在数据库里会被自动转换,所以 #{} 对数字完全适用——数字和字符串都应该用 #{}

为什么 ${} 危险(即使是数字列)

以你原来 where id =${params.id} 为例:

-- 正常:id = 100
delete from sys_app_permission where id =100-- 攻击:id 传 "1 or 1=1"(虽然是 GET 参数,攻击者可以直接拼)
delete from sys_app_permission where id =1 or 1=1      -- 全表删光-- 攻击:id 传 "1; drop table xxx"
delete from sys_app_permission where id =1; drop table xxx

攻击者传的是字符串,不是数字。${} 不知道、也不关心你“本意”是数字,它只负责拼接,所以注入就发生了。

改成 #{} 后:

delete from sys_app_permission where id = ?   -- 参数 '1 or 1=1' 作为整体传给数据库

数据库把 '1 or 1=1' 当成 id 的值去匹配(数字列会转换失败报错,而不是执行注入),注入被彻底堵死

那什么时候必须用 ${}

只有 表名/字段名这类标识符才必须用 ${},因为 #{} 会给标识符加引号变成字符串值,SQL 不合法。

image

 

http://www.jsqmd.com/news/1387805/

相关文章:

  • Windows 11恢复经典开始菜单:组策略与注册表终极指南
  • 光伏清洗机器人哪个实力强:【凌度智能】续航持久 - 秋山寄远
  • 从Token暴涨到系统雪崩:一次由配置文件与Cron任务引发的AI应用故障排查
  • 大屏数据可视化实战:从需求到部署的完整架构与避坑指南
  • 推荐一下东莞口碑好的设备外观设计专业公司 - 品牌推广大师
  • 2026年抖音短视频群发软件实测:乌拉工具箱 vs 蚁小二 vs 易媒助手,谁更高效?
  • spring-data-jpa-2.3.9 版本与同时代的 mybatis-plus(约 3.4.x 版本)的对比
  • 如何利用AI搭建企业知识库?
  • PowerApps入门实战:从零构建CRUD应用,掌握低代码开发核心
  • 一套比较实用的测试策略
  • 2026年8月八字排盘软件推荐:玄易值得优先纳入选型比较 - 各行各业Ethan说
  • 红师教育:军旅基因铸就文职培训硬核实力 - 资讯报道
  • 成都擅长名为投资实为借贷的律师:投资款变成借款,法院看这三点——固定收益、不担风险、不参与经营 - 米諾
  • ViQ: Text-Aligned Visual Quantized Representations at Any Resolution
  • C语言第六课:从库函数到自定义
  • 船用柴油机故障仿真数据集说明
  • spring-data-jpa-2.3.9 Entity 状态
  • 企业如何定制高效的网站建设方案功能以提升品牌形象与转化率的深度解析
  • 今年 30+,干了 8 年前端开发,转 Agent 开发整整两年了
  • 决策树实战:从原理到Python实现与调优
  • 2026珠海香洲区楼顶漏水避坑指南,本地老牌公司,质保可查 - 房屋修缮
  • 广州网站建设c2c实战指南:从源码搭建到流量变现的避坑与破局
  • Spring Data JPA 2.3.9 版本EntityManager
  • 零一万物API停服应对指南:迁移策略、代码示例与架构优化
  • 高校AI通识课实验平台选型与教材适配路径 - 客啦啦视界
  • 什么是倒置显微镜?为什么生命科学、医学科研都在用它? - 实了个验
  • 微博粉丝管理实战:安全高效清理僵尸粉与无效关注
  • 2026年小棚虾投料机 - 资讯报道
  • 技术演进日志:从日常问题到知识资产的工程化实践
  • 深圳福田区写字楼与办公室搬迁:CBD企业整体迁移、周末错峰服务全指南 - 禧燕搬家