Mybatis中的#和$的区别(预编译)

本文探讨了MyBatis中使用#{}

Mybatis中的#和$的区别

在mybatis中有两种传递值的方法,分别是用#{xxx}和${xxx}

现有sql语句查询用户做登录,使用${xxx}的话,sql语句如下

select * from user where name = ${name} and password = ${password}

用mybatis走数据库的话,可能就是

select * from user where name = 'xiaozhu' and password = '123456'

这样看似没有问题,但是如果密码传入'123456' or 1 = 1,那么sql就是

select * from user where name = 'xiaozhu' and password = '123456' or 1 = 1

造成即使密码不对也可以登录,也就是sql注入问题

解决sql注入问题最主要的解决办法就是使用数据库的预编译在mybatis中也就是使用#{},上述的sql语句如果是

select * from user where name = #{name} and password = #{password}

然后到数据库的话就是

select * from user where name = ? and password = ?

经过数据库编译后,允许以参数的形式传入进去,传入进去就只会被当做是name和password的值,也就达到了预防sql注入的问题

sql注入还可能有该表删表的操作,如果使用预编译的话,数据库会先解析传入的sql语句,后续执行的时候即使有改表操作也不会执行,会被数据库屏蔽

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值