SQL注入原理以及預防措施

1、SQL注入原理

就是通過利用一些查詢語句的漏洞,將SQL語句傳遞到服務器解析並執行的一種攻擊手段。SQL注入是一種注入攻擊,可以執行惡意SQL語句。它通過將任意SQL代碼插入數據庫查詢,使攻擊者能夠完全控制Web應用程序後面的數據庫服務器。攻擊者可以使用SQL注入漏洞繞過應用程序安全措施;可以繞過網頁或Web應用程序的身份驗證和授權,並檢索整個SQL數據庫的內容;還可以使用SQL注入來添加,修改和刪除數據庫中的記錄。

SQL注入漏洞可能會影響使用SQL數據庫(如MySQL,Oracle,SQL Server或其他)的任何網站或Web應用程序。犯罪分子可能會利用它來未經授權訪問用戶的敏感數據:客戶信息,個人數據,商業機密,知識產權等。SQL注入攻擊是最古老,最流行,最危險的Web應用程序漏洞之一。

2、常見的SQL注入場景

常見的sql注入之萬能密碼

原理:用戶進行用戶名和密碼驗證時,網站需要查詢數據庫。查詢數據庫就是執行SQL語句,但在查詢過程中,並未對一些特殊符號進行過濾,如單引號(')

舉一個例子:

(1)用戶登錄時,後臺執行的數據庫查詢操作(SQL語句)是:

     【Select user_id,user_type,email From users Where user_id=’用戶名’ And password=’密碼’】。

(2)由於網站後臺在進行數據庫查詢的時候沒有對單引號進行過濾,當輸入用戶名【admin】和萬能密碼【1’or’1】時,執行的SQL語句爲:

     【Select user_id,user_type,email From users Where user_id=’admin’ And password=’1’or’1’】。

(3)由於SQL語句中邏輯運算符具有優先級,【=】優先於【and】,【and】優先於【or】,且適用傳遞性。因此,此SQL語句在後臺解析時,分成兩句:

     【Select user_id,user_type,email From users Where user_id=’admin’ And password=’1’】和【’1’】,兩句bool值進行邏輯or運算,恆爲真。

   SQL語句的查詢結果爲TRUE,就意味着認證成功,也可以登錄到系統中。輸入用戶名【admin】,密碼【1’or’1】,即可登錄成功。

3、如何防止SQL注入?

(1)不要使用動態SQL

避免將用戶提供的輸入直接放入SQL語句中;最好使用準備好的語句和參數化查詢,這樣更安全。

(2)不要將敏感數據保留在純文本中

加密存儲在數據庫中的私有/機密數據;這樣可以提供了另一級保護,以防攻擊者成功地排出敏感數據。

(3)限制數據庫權限和特權

將數據庫用戶的功能設置爲最低要求;這將限制攻擊者在設法獲取訪問權限時可以執行的操作。

(4)避免直接向用戶顯示數據庫錯誤

攻擊者可以使用這些錯誤消息來獲取有關數據庫的信息。

(5)對訪問數據庫的Web應用程序使用Web應用程序防火牆(WAF)

這爲面向Web的應用程序提供了保護,它可以幫助識別SQL注入嘗試;根據設置,它還可以幫助防止SQL注入嘗試到達應用程序(以及數據庫)。

(6)定期測試與數據庫交互的Web應用程序

這樣做可以幫助捕獲可能允許SQL注入的新錯誤或迴歸。

(7)將數據庫更新爲最新的可用修補程序

這可以防止攻擊者利用舊版本中存在的已知弱點/錯誤。

 

發佈了114 篇原創文章 · 獲贊 77 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章