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

广东购物网站建设/企业文化培训

广东购物网站建设,企业文化培训,wordpress 登录后可查看,龙华做棋牌网站建设哪家公司便宜一、核心概念 在 MyBatis 的 XML 映射文件中,有两种方式将参数拼接到 SQL 语句中: ${}:直接字符串拼接(文本替换),不处理特殊字符,存在 SQL 注入风险。#{}:预编译占位符&#xff0…
一、核心概念

在 MyBatis 的 XML 映射文件中,有两种方式将参数拼接到 SQL 语句中:

  • ${}:直接字符串拼接(文本替换),不处理特殊字符,存在 SQL 注入风险
  • #{}:预编译占位符(?),自动过滤特殊字符,能防止 SQL 注入

二、代码示例分析

以下是一个模糊查询的 MyBatis XML 配置和测试用例:

1. XML 映射文件
<select id="findByNameLike2" resultType="Emp">select * from emp where name like '${name}'
</select>
2. 测试用例
@Test
public void testFindByNameLike2() throws IOException {// 正常查询:传入 "%张%"mapper.findByNameLike2("%张%").forEach(System.out::println);// 生成SQL:select * from emp where name like '%张%'// 恶意输入:传入 "abc' or '1=1----"mapper.findByNameLike2("abc' or '1=1----").forEach(System.out::println);// 生成SQL:select * from emp where name like 'abc' or '1=1----'
}

三、${} 的 SQL 注入风险详解
1. 正常输入场景
  • 参数"%张%"
  • 生成 SQLselect * from emp where name like '%张%'
  • 效果:正确查询名字包含“张”的员工。
2. 恶意输入场景
  • 参数"abc' or '1=1----"
  • 生成 SQL
select * from emp where name like 'abc' or '1=1----'
  • 解析
    由于 '1=1' 是恒真条件,此 SQL 会返回所有员工数据,导致数据泄露。

四、#{} 的预编译机制
1. 使用 #{} 的修改版
<select id="findByNameLikeSafe" resultType="Emp">select * from emp where name like #{name}
</select>
2. 测试用例对比
@Test
public void testFindByNameLikeSafe() {// 正确用法:传入 "%张%"mapper.findByNameLikeSafe("%张%");// 生成SQL:select * from emp where name like ?// 恶意输入:传入 "abc' or '1=1----"mapper.findByNameLikeSafe("abc' or '1=1----");// 生成SQL:select * from emp where name like ?// 参数值:被转义为 "abc' or '1=1----"(视为普通字符串)
}
  • 效果:恶意参数会被视为整体字符串,无法改变 SQL 结构。

五、使用建议与最佳实践
1. 优先使用 #{}
  • 所有用户输入或外部参数必须使用 #{},尤其是 WHERE 条件中的值。
2. 谨慎使用 ${}
  • 适用场景:动态表名、动态列名等非用户输入场景。
  • 风险控制:若必须使用 ${},需手动过滤危险字符(如单引号 ')。
3. 模糊查询的正确写法
  • 安全方式:在参数中拼接 %,而非 SQL 中。
// Java 代码中处理
String name = "%" + userInput + "%";
mapper.findByNameLikeSafe(name);

六、总结
特性${}#{}
处理方式直接替换预编译占位符
SQL 注入风险高风险无风险
适用场景动态表名/列名用户输入、条件值
性能无额外解析预编译优化

始终遵循规则:用户输入必须通过 #{} 传递!

http://www.whsansanxincailiao.cn/news/31970028.html

相关文章:

  • 网站建设的资源整合与系统设计/郑州网站seo顾问
  • 网站建设师薪资/软文营销网站
  • 卖汽车配件怎么做网站/百度关键词
  • 杭州五旋科技网站建设怎么样/网站seo优化的目的
  • 企业邮箱怎么申请的/上海seo推广方法
  • 滨海做网站的公司/刷推广链接
  • 重庆网站建设报价/关键词优化哪个好
  • 昆明大型网站建设费用/百度指数怎么分析
  • 江阴做网站/关键词排名是什么意思
  • 一级a做爰片阿v祥仔网站/东营seo网站推广
  • cnzz 网站域名怎么填/免费html网站制作成品
  • 网站最下端怎么做/石家庄网站建设案例
  • dedecms 网站首页/百度app下载最新版本
  • 17做网站广州起做网店/网络营销的用户创造价值
  • 如何能进腾讯做游戏视频网站/网络营销是什么意思?
  • 亚马逊图书官网/seo网络营销公司
  • 网站编程培训班/微指数查询入口
  • 泉州建行 网站/软文发布门户网站
  • 网站建设开发有什么好处/武汉搜索推广
  • 湖南外贸网站建设/自媒体发布软件app
  • 网批做衣服的网站/海外新闻发布
  • c#网站开发+pdf/全球网站排名查询网
  • 新乡商城网站建设哪家优惠/东莞关键词优化推广
  • 西安网站建设是什么/广东网络优化推广
  • 南昌做任务的网站/com域名多少钱一年
  • 青岛胶南做网站的/托管竞价推广公司
  • 东莞有哪些做推广的网站/友情链接建立遵循的原则包括
  • 厦门湖里区建设局网站/最好的推广平台排名
  • 四川建设安全监督管理局网站/百度一下 你就知道官网
  • 百度云做网站/微信营销策略