ibatis sql注入

轉自:http://blog.csdn.net/scorpio3k/article/details/7610973

對於ibaits參數引用可以使用#和$兩種寫法,其中#寫法會採用預編譯方式,將轉義交給了數據庫,不會出現注入問題;如果採用$寫法,則相當於拼接字符串,會出現注入問題。

例如:1)#xxx# 代表xxx是屬性值、map裏面的key或者是你的pojo對象裏面的屬性, ibatis會自動在它的外面加上引號,表現在sql語句是這樣的where xxx = 'xxx' ;

2)$xxx$ 則是把xxx作爲字符串拼接到你的sql語句中,如order by $xxx$ , ibatis 就會把他翻譯成order by xxx


注入問題

例如,如果屬性值爲“' or '1'='1 ”,採用#寫法沒有問題,採用$寫法就會有問題。

對於like語句,難免要使用$寫法,

 1. 對於Oracle可以通過'%'||'#param#'||'%'避免;

 2. 對於MySQL可以通過CONCAT('%',#param#,'%')避免;

 3. MSSQL中通過'%'+#param#+'% 。 

如下3種SQL語句:

[html] view plain copy
  1. mysql: select * from t_user where name like concat('%',#name #,'%')    
  2.    
  3. oracle: select * from t_user where name like '%'||#name #||'%'   
  4.    
  5. SQL Server:select * from t_user where name like '%'+#name #+'%     

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