首頁  >  文章  >  php教程  >  淺談mybatis中的#和$的區別 以及防止sql注入的方法

淺談mybatis中的#和$的區別 以及防止sql注入的方法

高洛峰
高洛峰原創
2017-01-05 17:21:491878瀏覽

mybatis中的#和$的區別

1. #將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
  
2. $將傳入的資料直接顯示產生在sql中。如:order by $user_id$,如果傳入的值是111,那麼解析成sql時的值為order by user_id,  如果傳入的值是id,則解析成的sql為order by id.
  
3. #方式能夠很大程度防止sql注入。
  
4.$方式無法防止Sql注入。


5.$方式一般用於傳入資料庫對象,例如傳入表名.
  
6.一般能用#的就別用$.

防止Sql注入

注意:聲明語句不要寫成selectse from t_stu where s_name like '%$name$%',這樣極易受到注入攻擊。

”${xx​​x}”這樣格式的參數會直接參與sql編譯,因此無法避免注入攻擊。但涉及動態表名和列名時,只能使用「${xxx}」這樣的參數格式。

在編寫mybatis的映射語句時,盡量採用「#{xxx}」這樣的格式。若不得不使用「${xxx}」這樣的參數,要手工地做好過濾工作,以防止sql注入攻擊。

例子

<sql id="condition_where"> 
  <isNotEmpty property="companyName" prepend=" and "> 
    t1.company_name like #companyName# 
  </isNotEmpty> 
</sql>

   


java程式碼和你原來的差不多,其實沒什麼不好,你要覺得麻煩把

以上就是小編為大家帶來的淺談mybatis中的#和$的區別以及防止sql注入的方法全部內容了,希望大家多多支持PHP中文網~

更多淺談mybatis中的#和$的區別以及防止sql注入的方法相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn