1. 程式人生 > 其它 >Mybatis的SQL注入問題學習

Mybatis的SQL注入問題學習

Mybatis的SQL語句可以基於註解的方式寫在類方法上面,更多的是以xml的方式寫到xml檔案。Mybatis中SQL語句需要我們自己手動編寫或者用generator自動生成。編寫xml檔案時,MyBatis支援兩種引數符號,一種是#,另一種是$。比如:

<select id="queryInfo"  resultType="store.pejkin.News">
  SELECT * FROM NEWS WHERE ID = #{id}
</select>

  #使用預編譯,$使用拼接SQL。

Mybatis框架下易產生SQL注入漏洞的情況

1、模糊查詢

Select * from news where title like ‘%#{title}%’       編譯錯誤
Select * from news where title like ‘%${title}%’       存在sql漏洞
select * from news where tile like concat(‘%’,#{title}, ‘%’) 
或者
select * from news where tile like '%'||#{deptName}||'%'

  

2、in 之後的多個引數

Select * from news where id in (#{ids})          編譯錯誤


Select * from news where
idin
<foreachcollection="ids"item="item"open="("separatosr=","close=")">
#{ids}
</foreach>

  

3、order by

這種場景應當在Java層面做對映,設定一個欄位/表名陣列,僅允許使用者傳入索引值。這樣保證傳入的欄位或者表名都在白名單裡面。需要注意的是在mybatis-generator自動生成的SQL語句中,order by使用的也是$,而like和in沒有問題