ibatis 取值以及sql注入


ibatis 配置文件中取值有两种:#和$

如果传值为userName="zhangsan"

#userName# , ibatis会自动在它的外面加上引号,结果是这样的:select * from user where user_name = 'zhangsan' ;

$userName$ 则是把zhangsan作为字符串拼接到sql中,结果是这样的:select * from user where user_name=zhangsan;

#写法会采用预编译方式,将转义交给了数据库,不会出现注入问题;如果采用$写法,则相当于拼接字符串,会出现注入问题如:

 

userName = "zhangsan' or user_name like'%%";

select * from user where user_name like '%$userName$%'; 会变成

select * from user where user_name like '%zhangsan' or user_name like '%%%'; 这样就会查询出所有的数据。



 

解决方法如下:

mysql: select * from XXX where name like concat('%',#name#,'%') 

oracle&db2: select * from XXX where name like '%'||#name#||'%' 

SQL Server:select * from XXX where name like '%'+#name#+'% 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章