SQL注入的內容和預防

2021-10-06 15:46:21 字數 1948 閱讀 7880

sql注入(sqli)是一種注入攻擊,,可以執行惡意sql語句。它通過將任意sql**插入資料庫查詢,使攻擊者能夠完全控制web應用程式後面的資料庫伺服器。攻擊者可以使用sql注入漏洞繞過應用程式安全措施;可以繞過網頁或web應用程式的身份驗證和授權,並檢索整個sql資料庫的內容;還可以使用sql注入來新增,修改和刪除資料庫中的記錄。

sql注入漏洞可能會影響使用sql資料庫(如mysql,oracle,sql server或其他)的任何**或web應用程式。犯罪分子可能會利用它來未經授權訪問使用者的敏感資料:客戶資訊,個人資料,商業機密,智財權等。sql注入攻擊是最古老,最流行,最危險的web應用程式漏洞之一。

帶內注入

這是典型的攻擊,攻擊者可以通過相同的通訊通道發起攻擊並獲得結果。這是通過兩種帶內技術完成的:

● 基於錯誤的sql注入:從顯示的錯誤訊息中獲取有關資料庫的資訊

● 基於聯合的sql注入:依賴於攻擊者能夠將union all被盜資訊的結果與合法結果連線起來。

這兩種技術都依賴於攻擊者修改應用程式傳送的sql,以及瀏覽器中顯示的錯誤和返回的資訊。如果應用程式開發人員或資料庫開發人員無法正確地引數化他們在查詢中使用的值,那麼它會成功。兩者都是試錯法,可以檢測到錯誤。

盲注入也稱為推理sql注入,盲注入攻擊不會直接從目標資料庫中顯示資料;相反,攻擊者會仔細檢查行為中的間接線索。http響應中的詳細資訊,某些使用者輸入的空白網頁以及資料庫響應某些使用者輸入需要多長時間,這些都可以是線索,具體取決於攻擊者的目標。他們還可以指向攻擊者嘗試的另乙個sqli攻擊途徑。

帶外注入

這種攻擊有點複雜,當攻擊者無法在單個直接查詢 - 響應攻擊中實現其目標時,攻擊者可能會使用此攻擊。通常,攻擊者會製作sql語句,這些語句在呈現給資料庫時會觸發資料庫系統建立與攻擊者控制的外部伺服器的連線。以這種方式,攻擊者可以收集資料或可能控制資料庫的行為。

二階注入就是一種帶外注入攻擊。在這種情況下,攻擊者將提供sql注入,該注入將由資料庫系統的單獨行為儲存和執行。當二級系統行為發生時(它可能類似於基於時間的作業或由其他典型管理員或使用者使用資料庫觸發的某些事情)並且執行攻擊者的sql注入,那就是當「伸出」到系統時攻擊者控制發生了。

如何防止sql注入攻擊?

不要使用動態sql,避免將使用者提供的輸入直接放入sql語句中;最好使用準備好的語句和引數化查詢,這樣更安全。

不要將敏感資料保留在純文字中,加密儲存在資料庫中的私有/機密資料;這樣可以提供了另一級保護,以防攻擊者成功地排出敏感資料。

限制資料庫許可權和特權,將資料庫使用者的功能設定為最低要求;這將限制攻擊者在設法獲取訪問許可權時可以執行的操作。

避免直接向使用者顯示資料庫錯誤,攻擊者可以使用這些錯誤訊息來獲取有關資料庫的資訊。

對訪問資料庫的web應用程式使用web應用程式防火牆(waf),這為面向web的應用程式提供了保護,它可以幫助識別sql注入嘗試;根據設定,它還可以幫助防止sql注入嘗試到達應用程式(以及資料庫)。

定期測試與資料庫互動的web應用程式,這樣做可以幫助捕獲可能允許sql注入的新錯誤或回歸。

將資料庫更新為最新的可用修補程式,這可以防止攻擊者利用舊版本中存在的已知弱點/錯誤。

eg:比如:在使用者名稱輸入框中輸入:』 or 1=1#,密碼隨便輸入,這時候的合成後的sql查詢語句為:

select * from users where username=』』 or 1=1#』 and password=md5(』』)

語義分析:「#」在mysql中是注釋符,這樣井號後面的內容將被mysql視為注釋內容,這樣就不會去執行了,換句話說,以下的兩句sql語句等價:

select * from users where username=』』 or 1=1#』 and password=md5(』』)

等價於select* from users where usrername=』』 or 1=1

因為1=1永遠是都是成立的,即where子句總是為真,將該sql進一步簡化之後,等價於如下select語句:

select * from users

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語句中的單引號 例如,在數字型引數中,沒有用程式去...