1. 程式人生 > 資料庫 >關於sql注入(詳解)

關於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中 。