Mybatis下的sql注入

以前只知道mybatis框架下,order by后面接的是列名是不能用#{},这样不起效果,只能用${},这样的话就可能产生sql注入。后来发现其实还有另外两种情况也是类似的:

1.order by ${} asc

像这种情况最好的办法是在java层面上做映射,比如说用户只能输入1-5,然后在代码层面将其映射为字段名,然后再使用${}

2.

Select * from news where id in (#{id})  这样写会报错

防范方法:使用mybatis自带的循环指令

select * from news where id in

<foreach collection="ids" item="item" open="("separator="," close=")">#{item} </foreach>

3.模糊查询

Select * from news where title like ‘%#{title}%’, 这样写会报错

方法方法:  select * from news where tile like concat(‘%’,#{title}, ‘%’)

----------------------------2019.4.1------------------------

补充一下这个可能是mysql的问题,java使用原生的jdbc也有这样的问题,php也是

上一篇:[HDU] 2795 Billboard [线段树区间求最值]


下一篇:UI前端开发都是做什么的以及html、css、php、js等究竟是神马关系