"ヾ(◍°∇°◍)ノ゙加油哟~","愿我们不负昭华,以梦为马!","愿我们历尽千帆,归来仍是少年!"

Mybatis的SQL注入问题学习

Mybatis的SQL语句可以基于注解的方式写在类方法上面,更多的是以xml的方式写到xml文件。Mybatis中SQL语句需要我们自己手动编写或者用generator自动生成。编写xml文件时,MyBatis支持两种参数符号,一种是#,另一种是$。比如:

1
2
3
<select id="queryInfo"  resultType="store.pejkin.News">
  SELECT * FROM NEWS WHERE ID = #{id}
</select>

  #使用预编译,$使用拼接SQL。

Mybatis框架下易产生SQL注入漏洞的情况

1、模糊查询

1
Select * from news where title like ‘%#{title}%’       编译错误Select * from news where title like ‘%${title}%’       存在sql漏洞select * from news where tile like concat(‘%’,#{title}, ‘%’) <br>或者 <br>select * from news where tile like '%'||#{deptName}||'%'

  

2、in 之后的多个参数

1
2
Select * from news where id in (#{ids})          编译错误<br><br><br>Select * from news where<br>id in<em id="__mceDel"><foreach collection="ids" item="item" open="("separatosr="," close=")"><br>#{ids}<br></foreach>
</em>

  

3、order by

这种场景应当在Java层面做映射,设置一个字段/表名数组,仅允许用户传入索引值。这样保证传入的字段或者表名都在白名单里面。需要注意的是在mybatis-generator自动生成的SQL语句中,order by使用的也是$,而like和in没有问题

 

posted @   深夜独行侠  阅读(282)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示