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