Mybatis是如何防止sql注入的

答:采用预编译的方式防止sql注入.但也不是完全会防住,能不能完全防住取决于mybatis使用者水平.


原理是怎样的呢?我们分析一下:

当我们执行Mybatis中写的sql语句时,会出现以下提示

SELECT * FROM user WHERE id = ? 

这时候其实Mybatis已经进行了预编译,我们不管传什么东西,都只会去替换占位符,比如我们传输一个AND,结果就会为:

SELECT * FROM user WHERE id = 'AND'而不是重新编译sql语句.


而我们经常用到的#{}和${},是有区别的.#{}是预编译的占位符,${}是纯字符串替换.

比如,我们用${},SELECT * FROM user WHERE id = ${id}

那我们出入AND时,会输出这么一个sql:

SELECT * FROM user WHERE id = AND

 这时候程序就会报错.但如果我们输入了 1;drop table user;这么一长串字符,你拼接一下试试看,是不是正好实现了注入?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值