Java防止SQL注入

2021-08-02 05:16:24 字數 1750 閱讀 6909

sql注入:

sql注入是最常見的攻擊方式之一,它不是利用作業系統或其它系統的漏洞來實現攻擊的,而是程式設計師因為使用sql語句拼接方式,並且沒有做好判斷,從而被不法使用者鑽了sql的空子。

比如在乙個登陸介面,要求使用者輸入使用者名稱和密碼:

使用者名稱:    'or

1=1--

密碼:

程式設計師後台寫的程式**僅是一條帶條件的查詢語句如:

string sql="select * from users where username='"+username+"'

and password='"+password+"'

"

這樣看來username處就會被上述登陸使用者名稱所代替,從而被進行替換得到這樣一條語句

select * from users where username=''

or1=1 --' and password=''

這條語句經過sql分析器解析自後就會將資料庫的所有資料全部讀出,為什麼呢?

很簡單,因為看到條件where後面username=」 or 1=1 的意思是使用者名稱等於」或1=1 ,這個條件是恒等一定成功的。

那麼兩個-又是什麼原因呢?其實很簡單,這兩個-意味著,注釋,它將後面的語句注釋,讓其不起作用,這樣就可以順利將資料庫裡面所有資料讀出來了。

當然,執行恒等查詢所有資料這還是比較溫柔的,如果是執行

select * from users where username='' ;

drop

database (db name) --' and password=''

不難看出,這是將資料庫所有資料全部刪除吧。

第一種採用預編譯語句集,它內建了處理sql注入的能力,只要使用它的

setstring方法傳值即可:

string sql= "select * from users where username=? and password=?;

preparedstatement prestate = conn.preparestatement(sql);

prestate.setstring(1, username);

prestate.setstring(2, password);

resultset rs = prestate.executequery();

...

第二種是採用正規表示式將包含有 單引號(『),分號(;) 和 注釋符號(–)的語句給替換掉來防止sql注入

public static string transactsqlinjection(string str)

username=transactsqlinjection(username);

password=transactsqlinjection(password);

string sql=

"select * from users where username='"

+username+

"' and password='"

+password+

"' "

statement sta = conn.createstatement();

resultset rs = sta.executequery(sql);

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的...