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没有问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)