MyBatis-防止Sql注入以及sql中#{}与${}取参数的区别
2017-01-10 15:22
337 查看
#{}能够更安全的取出参数
${}取出的参数不安全
尽量不要使用${}取参数
原因:
A:select * from table where a = '10001' and b = ${parameter}
B:select * from table where a = '10001' and b = #{parameter}
若parameter的值为: 1 or b in (1,2,3,4,5,6,7,8,9)
A的sql就解析为 select * from table where a = '10001' and b = 1 or b in (1,2,3,4,5,6,7,8,9) // 因此后面就可以无限的or获取所需要的信息,这就是sql注入。
B的sql就解析为 select * from table where a = '10001' and b = '1 or b in (1,2,3,4,5,6,7,8,9) ' // 这里'1 or b in (1,2,3,4,5,6,7,8,9) ' 就成为了一个字符串参数,而没有将or、in解析成为sql的运算符
总结:综上所述,使用#{}比使用${}更加的安全.
${}取出的参数不安全
尽量不要使用${}取参数
原因:
A:select * from table where a = '10001' and b = ${parameter}
B:select * from table where a = '10001' and b = #{parameter}
若parameter的值为: 1 or b in (1,2,3,4,5,6,7,8,9)
A的sql就解析为 select * from table where a = '10001' and b = 1 or b in (1,2,3,4,5,6,7,8,9) // 因此后面就可以无限的or获取所需要的信息,这就是sql注入。
B的sql就解析为 select * from table where a = '10001' and b = '1 or b in (1,2,3,4,5,6,7,8,9) ' // 这里'1 or b in (1,2,3,4,5,6,7,8,9) ' 就成为了一个字符串参数,而没有将or、in解析成为sql的运算符
总结:综上所述,使用#{}比使用${}更加的安全.
相关文章推荐
- mybatis中的#和$的区别 以及 防止sql注入
- 浅谈mybatis中的#和$的区别 以及防止sql注入的方法
- 参数化SQL语句,防止SQL注入漏洞攻击
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
- Mybatis:传入参数方式以及#{}与${}的区别
- hibernate HQL查询以及原生SQL查询参数类型的区别
- 2017_11_28 mybatis多参数传入,以及#,$的区别
- mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
- mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
- 参数化SQL语句,防止SQL注入漏洞攻击 分类: ASP.NET 2012-03-09 09:57 2360人阅读 评论(0) 收藏
- 【小平工作日志】mybatis深入理解(一)之 # 与 $ 区别以及mybatis 对 sql 预编译
- mybatis之 # 与 $ 区别以及 sql 预编译
- mybatis之 # 与 $ 区别以及 sql 预编译
- Mybatis中的#{}与${}区别以及什么是SQL注入
- Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是#, #{}和${}的区别以及order by注入问题