xss mybatis sql注入漏洞修改小技巧
2024-09-03 本文已影响0人
爱吃赵一鸣
公司一直使用mybatis作为orm框架,SQL统一管理在xml文件中。最近客户系统上线前进行系统等保检查,反馈有大量的SQL注入漏洞,需要进行修复才能上线。
查看发过来的文档,问题SQL集中在几种SQL,ids参数值'aa','bb' name参数值 aa
1、select a.fid,a.fname from a where a.fid in(${ids})
2、select a.fid,a.fname from a where a.fname like'%${name}%'
mybatis中使用#号占位符会根据参数值类型增加引号,而$占位符则是直接显示原值,所以存在被SQL注入的可能。系统中大量存在这样的写法,如果改传值需要去修改代码的逻辑,工作量太大。如果改xml就能修复这个问题,工作量少很多,第2条比较简单,第1条复杂点,试了多次终于可以了,下面是方案,使用eclipse的正则替换,半小时就把这个问题解决了
1、selecta.fid,a.fname from a where a.fid in<foreach collection="ids.replace("'","").split(',')" index="index" item="item"open="(" separator=","close=")">#{item,jdbcType=VARCHAR}</foreach>
2、select a.fid,a.fname from a where a.fname like concat('%',#{name},'%')
等保现在是系统上线的基本要求了,所以 工作中mybatis推荐使用#占位符,避免SQL注入,