${}中的变量什么值,就会简单的替代变量,不会做处理
比如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的数据注入攻击。
原文:https://www.cnblogs.com/feixiangdecainiao/p/10483350.html