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