myBatis的SQL注入問題

sqlMap中儘可能不要使用$;$使用的是Statement(拼接字符串),會出現注入問題。#使用的是PreparedStatement(相似於預編譯),將轉義交給了數據庫,不會出現注入問題;.前者容易出現SQL注入之類的安全問題,因此ibatis推薦使用#。java

一、  正確使用$示例:ORDER BY $sortFieldName$ $sortType$,當參數是數據庫字段名時這樣使用是合適的,但必定注意這些參數必定不能是用戶輸入的。mysql

二、  錯誤使用$示例:URL LIKE '%$URL$%',好比參數URL傳進一個單引號「'」,生成的sql語句會是:URL like '%'%',這樣確定是會報錯的,解決方法是利用字符串鏈接的方式來構成sql語句,此處應該改成: URL LIKE '%’||#URL#||’%'。sql

三、  錯誤的使用$通常都出如今 like後面,能夠搜索 %$ 或者 $%。修改方法比較簡單直接替換便可。%$替換爲 %’||# , $%替換爲#||’%。數據庫

 綜上:安全

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

 1. 對於Oracle能夠經過'%'||'#param#'||'%'避免;spa

 2. 對於MySQL能夠經過CONCAT('%',#param#,'%')避免;code

 3. MSSQL中經過'%'+#param#+'% 。 orm

以下3種SQL語句:字符串

mysql: select * from t_user where name like concat('%',#name #,'%')      
oracle: select * from t_user where name like '%'||#name #||'%'      
SQL Server:select * from t_user where name like '%'+#name #+'%
相關文章
相關標籤/搜索