${}中的变量什么值,就会简单的替代变量,不会做处理

比如delete * from tb_label where name=${labelname}

如果labelname的值是 something' or 'x'='x

替换后的结果就是delete * from tb_label where name='something' and 'x'='x'

这样就不能防止注入攻击

#{}可以防止注入攻击,以为传入的参数会处理一下,自动给传入变量的值加上单引号,并且有的字符会做转译处理

同样上面的情况替换后就会变成下面的语句.

delete * from tb_label where name='something\' and \'x\'=\'x'

这样就会查不到数据,有效防止sql的数据注入攻击。

 

 

注意的是,普通的数据类型使用${value}里面的value值时必须的,不能变的,当然不建议使用${}

 

下面是一个坑,自己以身试坑,红色部分不能使用单引号括起来,这部分还有一种写法就是%${labelname}%,下面的这种是利用"%"'labelname'"%"这种sql的数据库查询语句

mybatis中查询使用#{}和${}的区别

 

相关文章:

  • 2021-07-14
  • 2022-12-23
  • 2021-05-10
  • 2022-01-12
  • 2021-10-23
  • 2021-09-21
  • 2021-05-17
猜你喜欢
  • 2021-11-20
  • 2021-08-06
  • 2022-02-02
  • 2021-07-26
  • 2021-11-20
  • 2021-11-17
相关资源
相似解决方案