java防止SQL注入

2021-05-24 09:04:57 字數 1566 閱讀 5476

sql注入是最常見的攻擊方式之一,它不是利用作業系統或其它系統的漏洞來實現攻擊的,而是程式設計師因為沒有做好判斷,被不法

使用者鑽了sql的空子,下面我們先來看下什麼是sql注入:

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

使用者名稱:       ' or 1=1 --  

密       碼:  

點登陸,如若沒有做特殊處理,而只是一條帶條件的查詢語句如:

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

那麼這個非法使用者就很得意的登陸進去了.(當然現在的有些語言的資料庫api已經處理了這些問題)

這是為什麼呢?我們來看看這條語句,將使用者輸入的資料替換後得到這樣一條語句:

select * from users where username='' or 1=1 --' and password=''

為了更明白些,可以將其複製到sql分析器中,將會發現,這條語句會將資料庫的資料全部讀出來,為什麼呢?

很簡單,看到條件後面 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注入

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

Java防止SQL注入

sql注入 sql注入是最常見的攻擊方式之一,它不是利用作業系統或其它系統的漏洞來實現攻擊的,而是程式設計師因為使用sql語句拼接方式,並且沒有做好判斷,從而被不法使用者鑽了sql的空子。比如在乙個登陸介面,要求使用者輸入使用者名稱和密碼 使用者名稱 or 1 1 密碼 程式設計師後台寫的程式 僅是...