码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis ${} 和 #{}

时间:2018-11-09 12:13:42      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:tis   小伙伴   联系   username   bean   rom   需要   where   sql注入   

                mybatis#{}和${}区别

${} :是做字符串拼接不能防止sql注入。并且单个参数时${这里面必须是value},

  如果参数时字符串时需要在${}前后加上单引号。         

  

  假设通过名称查询user 表    

    注入漏洞sql:select * from user where username = ‘${value}‘ ,如果${value} 中

      value= “ aa ‘ or ‘a‘ = ‘a ” 此时就可以忽略查询条件直接将所有的用户信息查询出。

 

#{}:是占位符,可以有效的防止sql注入,如果参数是字符类型时会在参数两边加上单引号。

  如果参数是一个#{随意写},如果是对象就需要#{java bean 属性名}

 

  sql注入问题:看到这里小伙伴们肯定要说如果用#{}传入上面同样的参数也会出现这样的问题,

  其实不然。此时就需要区分两者的机制了。#{}是会进行预编译的, 因此#{}里面的参数不会进行SQL编辑,

  仅仅只是把里面的值当成一个参数。而${}是先变成生sql字符串再进行SQL编译,因此会造成生sql注入。

 

  由于是本人亲自编写,未经允许请勿转载。联系方式:qq2580052864

 

mybatis ${} 和 #{}

标签:tis   小伙伴   联系   username   bean   rom   需要   where   sql注入   

原文地址:https://www.cnblogs.com/YeShaoFa/p/9934222.html

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