当前位置:   article > 正文

Mybatis中#{}与${}的区别以及防止SQL注入的方法_sql注入就不能用$吗?

sql注入就不能用$吗?

Mybatis中#{}与${}的区别

Mybatis在处理#{}时,会将SQL中的#{}使用占位符?代替,调用PreparedStatement的set方法进行赋值,真正查询时即在DBMS才会带入参数。相当于先编译好SQL语句再取值
${}则是简单的替换,相当于先取值再编译SQL语句。
存在问题:
${}会导致SQL注入,#{}则不会。
SQL注入:指把用户输入的数据拼接到sql语句后面作为sql语句的一部分执行
解决SQL注入:
(1)、JDBC使用 PreparedStatement代替Statement, PreparedStatement 不仅提高了代码的可读性和可维护性.而且也提高了安全性,有效防止sql注入;
(2)、能使用#{}的地方应尽量使用#{};
原则上:
(1)、为防止SQL注入,一般情况下都使用#{};
$方式一般用于传入数据库对象,例如当传入参数为字段名、表名、排序方式、固定常量时则可以使用;这时可能导致sql注入,解决方法:此时需要手工过滤,如通常 order by 的字段名是有限的,因此可以使用白名单的方式来限制参数值。
(2)#{}可以有效防止SQL注入
${}可能导致SQL注入,能不用就不要用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/545164
推荐阅读
相关标签
  

闽ICP备14008679号