码迷,mamicode.com
首页 > 数据库 > 详细

mybatis sql注入

时间:2018-04-21 19:42:45      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:dstat   编译过程   sql语句   一个   sql注入   http   bubuko   区别   过程   

技术分享图片

 

技术分享图片

 

这是${}与#{}的区别,#{}采用了预编译,在SQL执行前,会先将上面的SQL发送给数据库进行编译;执行时,直接使用编译好的SQL,替换占位符“?”就可以了。因为SQL注入只能对编译过程起作用,所以这样的方式就很好地避免了SQL注入的问题。

【底层实现原理】MyBatis是如何做到SQL预编译的呢?其实在框架底层,是JDBC中的PreparedStatement类在起作用,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行同一个SQL时,能够提高效率。原因是SQL已编译好,再次执行时无需再编译。

${}这样格式的参数会直接参与SQL编译,从而不能避免注入攻击

简单说,#{}是经过预编译的,是安全的${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入

 

mybatis sql注入

标签:dstat   编译过程   sql语句   一个   sql注入   http   bubuko   区别   过程   

原文地址:https://www.cnblogs.com/shenzhichipingguo/p/8902243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!