一、Mybatis框架下易产生SQL注入漏洞的场景
在基于Mybatis框架的Java白盒代码审计工作中,通常将着手点定位在Mybatis的配置文件中。通过查看这些与数据库交互的配置文件来确定SQL语句中是否存在拼接情况,进而确立跟踪点。
通过总结,Mybatis框架下易产生SQL注入漏洞的情况有以下三种:
1. 模糊查询 like
以新闻详情页面为例,按照新闻标题对新闻进行模糊查询,如果考虑安全编码规范问题,其对应的SQL语句如下:
select * from `news` where `title` like ‘%#{title}%‘
但这样写是不对的,于是研发人员将SQL语句修改为:
select * from `news` where `title` like ‘%${title}%‘
这种情况程序不再报错,但是此时产生了SQL语句拼接问题,容易产生SQL注入漏洞。
2. 多值查询 in
对新闻进行同条件多值查询的时候,用户输入 1001,1002,1003 时,如果考虑安全编码规范,对应的SQL语句为:
select * from `news` where `id` in(#{id})
这样的SQL语句虽然能执行但得不到预期结果,于是研发人员将SQL语句修改为:
select * from `news` where `id` in (${id})
修改SQL语句之后达到了预期效果,但却引入了SQL语句拼接的问题。
3. order by