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 密碼 程式設計師後台寫的程式 僅是...