使用mybatis的程式或系統,只要使用#{}傳遞的引數,就不會存在sql注入漏洞,因為它使用的是和jdbc的preparestatemnt物件,使用的預編譯傳遞引數,將轉義交給了資料庫,
不會出現sql注入的問題。但如果使用不當,例如使用${}來傳遞拼接引數就會有sql注入的問題。
正確的用法:
1、 正確使用$示例:order by $sortfieldname$ $sorttype$,當引數是資料庫欄位名時這樣使用是合適的,但一定注意這些引數一定不能是使用者輸入的。
2、 錯誤使用$示例:url like '%$url$%',比如引數url傳進乙個單引號「'」,生成的sql語句會是:url like '%'%',這樣肯定是會報錯的,解決方法是利用字串連線的方式來構成sql語句,此處應該改為: url like '%』||#url#||』%'。
3、 錯誤的使用$一般都出現在 like後面,可以搜尋 %$ 或者 $%。修改方法比較簡單直接替換即可。%$替換為 %』||# , $%替換為#||』%。
總結:對於like語句,難免要使用$寫法,
1. 對於oracle可以通過'%'||'#param#'||'%'避免;
2. 對於mysql可以通過concat('%',#param#,'%')避免;
3. mssql中通過'%'+#param#+'% 。
如下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 #+'%'
mybatis SQL注入
sql注入,大家都不陌生,是一種常見的攻擊方式。攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段 例如 or 1 1 這樣的語句 有可能入侵引數檢驗不足的應用程式。所以,在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性要求很高的應用中 比如銀行軟體 經常使用將sql語句全部替...
Mybatis SQL對映檔案
insert into tb employee last name,email,gender values update tb employee set last name email gender where id delete from tb employee where id select i...
手寫Mybatis SQL註解
資料庫中有user表 查詢 動態 invoke public object invoke object proxy,method method,object args throws throwable bxcselect select method.getdeclaredannotation bxc...