定義:
把sql命令插入到web表單提交或者輸入網域名稱或者構造頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令來盜取資訊或者攻擊資料庫伺服器。
檢查sql注入漏洞
檢查所有的輸入;包括網域名稱輸入(get)表單提交(post)以及put請求,如果在這些地方注入sql命令能夠成功進入系統或者丟擲sql異常則可能存在sql注入漏洞。
頁面請求域數字注入
如原網域名稱為:
localhost:8080/test/article?id=1
注入為localhost:8080/test/article?id=-1 or 1=1(如果後端沒有型別校驗輸入sql命令也非預編譯那麼將查詢出所有的資料因為1=1永遠為真)
字串注入
如表單提交後的查詢資訊為
select * from t_user where username='username' and password ='password'
注入攻擊為:
在username輸入處加入sql的注釋「#」或者「--」
效果為select * from t_user username='username'
# ' and password ='password'
那麼紅色字型部分將會被sql伺服器認為是注釋語句而不執行。「--」效果等同於「#」
預防sql注入
1.永遠不要信任使用者的輸入。對使用者的輸入進行
型別
和格式
校驗,可以確定型別校驗type、通過
正規表示式
校驗格式
,或限制長度;對單引號和雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可以使用引數化的sql(jdbc提供的preparedstatement的引數化查詢)或者直接使用
儲存過程
進行資料查詢訪問。
3.永遠不要使用
管理員 (root)
許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。
4.不要把機密資訊直接存放,加密或者hash掉密碼和敏感的資訊。
5.應用的異常資訊應該給出盡可能少的提示,最好使用自定義的
錯誤資訊
對原始錯誤資訊進行包裝
6.sql注入的檢測方法一般採取輔助
軟體 或**平台來檢測,軟體一般採用sql注入檢測工具jsky,**平台就有億思
**安全
平台檢測工具。mdcsoft scan等。採用
mdcsoft-ips
可以有效的防禦sql注入,xss攻擊等。
預編譯機制預防sql注入
首先看一下非執行預編譯的效果
1、構造永遠為真的查詢
2、構造注釋字串攻擊
可以看到在「#"後面所有的條件都被注釋掉了,如果此處前面的條件是使用者名稱那麼則可以通過此注入拿到使用者密碼等資訊。
再看預編譯後的結果
1、構造永遠為真的查詢
可以看到對於永遠為真的查詢雖然不會返回所有記錄但是仍然會返回第一條記錄,所以在對於預編譯的引數檢驗的時候仍然需要做格式和型別校驗。
2、構造注釋字元的查詢
可以看到對於使用注釋符的引數將丟擲異常。
mysql伺服器的預編譯命令
sql注入預防
sql注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的sql語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。1.簡單又有效的方法 prepar...
sql注入預防
在我們登陸驗證時會發現sql注入的現象。1.sql注入發生原因 因為如果使用者在使用者名稱上輸入的是 or 1 1 時,我們得到的sql語句是select from shop user where username or 1 1 and password d41d8cd98f00b204e98009...
如何預防SQL注入
以前我出去面試時,人家問我什麼叫sql注入,我很迷芒的告訴人家 我不知道,因為我從來沒有遇到過這類情況。後來隨著sql注入漸入流行,我才發現,其實sql注入是因為程式設計師寫程式時的不良習慣導致的一類漏洞的總稱。其主要原因是程式設計師沒有處理好sql語句中的單引號 例如,在數字型引數中,沒有用程式去...