關於sql注入(詳解)
sql注入
威脅簡介
SQL注入是比較常見的網路攻擊方式之一,它不是利用作業系統的BUG來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過SQL語句,實現無帳號登入,甚至篡改資料庫。
攻擊思路
償試所有可以輸入的地方,償試注入攻擊。 根據返回的報錯結果,判斷後臺服務的型別及資料庫的型別。 確認後臺服務及資料庫型別後,改進攻擊方案,進行有針對性的攻擊。
攻擊示例
要進入一個系統,當然最離不開的就是登入介面,所以我們就來看看如何免密碼登入系統。
登入介面要求兩個輸入項:使用者名稱、密碼。
我們可以這樣實現免賬號登入:使用者名稱輸入“’ or 1=1 --”, 密碼輸入隨意字元。
那麼現在來分析一下,為什麼可以免賬號登入。
後臺驗證一般是類似的SQL:
String sql = “select * from tuser where user_name=’ “+user_name+” ’ and user_pass=’ “+user_pass+” '”;
拼上我們輸入的引數後,語句變成了:
select * from tuser where user_name=’ ’ or 1=1 --‘and user_pass=’’
後面的"–‘and user_pass=’’" 相當於是註釋程式碼,不生效。實際執行的SQL為:
select * from tuser where user_name=’ ’ or 1=1
如果希望進一步加強危害,可以實現任意語句執行,例如:使用者名稱傳入“’; drop table tuser; --”; 實際執行的SQL變成了:
select * from tuser where user_name=’’ ; drop table tuser; --’ and password=’’
這樣你的表就沒了~
應對方案
推薦方案
採用 佔位符 方式進行SQL傳參,禁止將入參直接拼接到SQL中 。