mybatis如何防止sql注入(2)

本文介绍了在MyBatis框架中如何通过预编译机制和动态SQL指令防范SQL注入漏洞,包括模糊查询、多值查询及排序场景的具体实现。

Mybatis框架下SQL注入漏洞修复建议

1. 模糊查询like SQL注入修复建议
按照新闻标题对新闻进行模糊查询,可将SQL查询语句设计如下:
select * from news where tile like concat(‘%’,#{title}, ‘%’),
采用预编译机制避免了SQL语句拼接的问题从根源上防止了SQL注入漏洞的产生

2. in之后的参数SQL注入修复建议
在对新闻进行同条件多值查询的时候,可使用Mybatis自带循环指令解决SQL语句动态拼接的问题:
select * from news where id in
<foreach collection="ids" item="item" open="("separator="," close=")">

#{item}

</foreach>

3. order by SQL注入修复建议--在Java层面做映射
预编译机制只能处理查询参数,其他地方还需要研发人员根据具体情况来解决。

如前面提到的排序情景:

Select * from news where title =‘京东’ order by #{time} asc,

这里time不是查询参数,无法使用预编译机制,只能这样拼接:

Select * from news where title =‘京东’ order by ${time} asc 。
针对这种情况研发人员可以在java层面做映射来进行解决。

如当存在发布时间time和点击量click两种排序选择时,我们可以限制用户只能输入1和2。

当用户输入1时,我们在代码层面将其映射为time,当用户输入2时,将其映射为click。

而当用户输入1和2之外的其他内容时,我们可以将其转换为默认排序选择time(或者click)。

转载于:https://www.cnblogs.com/ipetergo/p/6760061.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值