1
ixiaozhi 2017-04-04 16:35:31 +08:00
select * from table where id = ${id} =====> ${id} -> 1;drop table ....... =====> select * from table where title = 1; drop table .....
|
2
zacharyjia 2017-04-04 16:39:36 +08:00
@ixiaozhi 我猜 lz 是在问 $ 和 # 的区别
|
3
ixiaohei 2017-04-04 17:06:07 +08:00
$是静态替换,相当于最后替换字符串。#是动态的,原理是 prepearStatement 占位符。应该是 JDBC 驱动做的转换,比较安全,推荐方式。但是很多场景 prepearStatement 处理不了,我记得替换表名应该是处理不了要用$,其他的用#。具体可以 mybatis 源代码,做了两步转换的。第一步静态替换就是处理$。第二部处理#.
|
4
esolve OP @ixiaozhi 你意思是 譬如
select * from table where username = ${name} 用户在对话框输入一个用户名为 1;drop table 然后就 select * from table where username = 1; drop table 如果 select * from table where username = #{name} 用户输入 1;drop table select * from table where username = “ 1; drop table ” 这样#使得这个 sql 无效 而$使得 sql 有效? |