mybatis防止sql注入的原理

1.什么是sql注入?

最早接触sql注入是在大学的时候,其实我理解,就是sql 对传入参数的拼接,会引发安全问题,举个例子

select  name from student where id = ();   这里括号里的参数我如果传 “3;drop table student;”,就发生注入了。

2.原理,怎么防止?

发生sql注入的原因是,不安全的参数拼接,编译后,sql执行,如上例子,会出现问题。那怎么防止?

其实在Java JDBC中 我们都知道 有 用 ?占位符去代替参数先进行编译,然后代入参数执行,这样就可以避免注入,why?因为sql注入不安全因素是发生在编译期,用占位符后,就避免了这个问题。

3.mybatis中的防注入?#{} 和${}区别?

其实 #{}正是用了?占位符,而${} (使用场景:order by 这样固定的字段后面,但也要防止安全问题)则是原样代入,mybatis就是用#{}来实现防注入,而底层是用JDBC的PreparedStatement实现的,如上个问题所述。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值