JAVA中防止SQL注入

2021-06-26 16:55:01 字數 1356 閱讀 5820

如果使用者執行

select * from product where id = 5

這條語句。其中5是有使用者輸入的。

sql注入的含義就是,一些搗蛋使用者輸入的不是5,而是5; delete from orders

那麼原來的sql語句將會變為,

select * from product where id=5; delete from orders

在執行完select後,還將刪除orders表裡的所有記錄。(如果他只刪了這些記錄,已經謝天謝地了,他可能會做更可怕地事情)。

上述語句會被編譯為,

select * from product where id=? 

從而有效防止sql注入。

ibatis解決sql注入

(1) ibatis xml配置:下面的寫法只是簡單的轉義 name like '%$name$%'

(2) 這時會導致sql注入問題,比如引數name傳進乙個單引號「'」,生成的sql語句會是:name like '%'%'

(3) 解決方法是利用字串連線的方式來構成sql語句 name like '%'||'#name#'||'%'

(4) 這樣引數都會經過預編譯,就不會發生sql注入問題了。

(5) #與$區別:

#***# 代表***是屬性值,map裡面的key或者是你的pojo物件裡面的屬性, ibatis會自動在它的外面加上引號,表現在sql語句是這樣

的 where *** = '***' ;

$***$ 則是把***作為字串拼接到你的sql語句中, 比如 order by topicid , 

語句這樣寫 ... order by #***# ibatis 就會把他翻譯成 order by 'topicid' (這樣就會報錯) 

語句這樣寫 ... order by $***$ ibatis 就會把他翻譯成 order by topicid

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.一般能用#的就別用$.

mybatis排序時使用order by 動態引數時需要注意,用$而不是#

JAVA防止SQL注入

sql注入是最常見的攻擊方式之一,它不是利用作業系統或其它系統的漏洞來實現攻擊的,而是程式設計師因為沒有做好判斷,被不法 使用者鑽了sql的空子,下面我們先來看下什麼是sql注入 比如在乙個登陸介面,要求使用者輸入使用者名稱和密碼 使用者名稱 or 1 1 密 碼 點登陸,如若沒有做特殊處理,而只是...

java防止SQL注入

sql注入是最常見的攻擊方式之一,它不是利用作業系統或其它系統的漏洞來實現攻擊的,而是程式設計師因為沒有做好判斷,被不法 使用者鑽了sql的空子,下面我們先來看下什麼是sql注入 比如在乙個登陸介面,要求使用者輸入使用者名稱和密碼 使用者名稱 or 1 1 密 碼 點登陸,如若沒有做特殊處理,而只是...

Java防止SQL注入

1.定義 所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。2.防止sql注入的方法 a 使用preparedstatement代替statement 1 使用preparedstatement 比statement的...