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#+'% 

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