9.SQL注入

1所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令,比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式***.

2.原理

SQL注入***指的是通過構建特殊的輸入作爲參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,通過執行SQL語句進而執行***者所要的操作,其主要原因是程序沒有細緻地過濾用戶輸入的數據,致使非法數據侵入系統。
根據相關技術原理,SQL注入可以分爲平臺層注入和代碼層注入。前者由不安全的數據庫配置或數據庫平臺的漏洞所致;後者主要是由於程序員對輸入未進行細緻地過濾,從而執行了非法的數據查詢。基於此,SQL注入的產生原因通常表現在以下幾方面:①不當的類型處理;②不安全的數據庫配置;③不合理的查詢集處理;④不當的錯誤處理;⑤轉義字符處理不合適;⑥多個提交處理不當。

3.***

如果應用程序使用特權過高的帳戶連接到數據庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內容直接用來構造動態sql命令,或者作爲存儲過程的輸入參數,這些表單特別容易受到sql注入的***。而許多網站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中本身的變量處理不當,使應用程序存在安全隱患。這樣,用戶就可以提交一段數據庫查詢的代碼,根據程序返回的結果,獲得一些敏感的信息或者控制整個服務器,於是sql注入就發生了。
4.SQL注入技術

強制產生錯誤

對數據庫類型、版本等信息進行識別是此類型***的動機所在。它的目的是收集數據庫的類型、結構等信息爲其他類型的***做準備,可謂是***的一個預備步驟。利用應用程序服務器返回的默認錯誤信息而取得漏洞信息。

採用非主流通道技術

除HTTP響應外,能通過通道獲取數據,然而,通道大都依賴與數據庫支持的功能而存在,所以這項技術不完全適用於所有的數據庫平臺。SQL注入的非主流通道主要有E-mail、DNS以及數據庫連接,基本思想爲:先對SQL查詢打包,然後藉助非主流通道將信息反饋至***者。

使用特殊的字符

不同的SQL數據庫有許多不同是特殊字符和變量,通過某些配置不安全或過濾不細緻的應用系統能夠取得某些有用的信息,從而對進一步***提供方向。

使用條件語句

此方式具體可分爲基於內容、基於時間、基於錯誤三種形式。一般在經過常規訪問後加上條件語句,根據信息反饋來判定被***的目標。

利用存儲過程

通過某些標準存儲過程,數據庫廠商對數據庫的功能進行擴展的同時,系統也可與進行交互。部分存儲過程可以讓用戶自行定義。通過其他類型的***收集到數據庫的類型、結構等信息後,便能夠建構執行存儲過程的命令。這種***類型往往能達到遠程命令執行、特權擴張、拒絕服務的目的。

避開輸入過濾技術

雖然對於通常的編碼都可利用某些過濾技術進行SQL注入防範,但是鑑於此種情況下也有許多方法避開過濾,一般可達到此目的的技術手段包括SQL註釋和動態查詢的使用,利用截斷,URL編碼與空字節的使用,大小寫變種的使用以及嵌套剝離後的表達式等等。藉助於此些手段,輸入構思後的查詢可以避開輸入過濾,從而***者能獲得想要的查詢結果。

推斷技術

能夠明確數據庫模式、提取數據以及識別可注入參數。此種方式的***通過網站對用戶輸入的反饋信息,對可注入參數、數據庫模式推斷,這種***構造的查詢執行後獲得的答案只有真、假兩種。基於推斷的注入方式主要分爲時間測定注入與盲注入兩種。前者是在注入語句里加入語句諸如“waitfor100”,按照此查詢結果出現的時間對注入能否成功和數據值範圍的推導進行判定;後者主要是“andl=l”、“andl=2”兩種經典注入方法。這些方式均是對一些間接關聯且能取得迴應的問題進行提問,進而通過響應信息推斷出想要信息,然後進行***。[1]

SQL注入防範

  要防禦SQL注入,用戶的輸入就絕對不能直接被嵌入到SQL語句中。恰恰相反,用戶的輸入必須進行過濾,或者使用參數化的語句。參數化的語句使用參數而不是將用戶輸入嵌入到語句中。在多數情況中,SQL語句就得以修正。然後,用戶輸入就被限於一個參數。

錯誤消息處理


  防範SQL注入,還要避免出現一些詳細的錯誤消息,因爲***們可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句、企業規則等。

加密處理

將用戶登錄名稱、密碼等數據加密保存。加密用戶輸入的數據,然後再將它與數據庫中保存的數據比較,這相當於對用戶輸入的數據進行了“消毒”處理,用戶輸入的數據不再對數據庫有任何特殊的意義,從而也就防止了***者注入SQL命令。
存儲過程來執行所有的查詢

  SQL參數的傳遞方式將防止***者利用單引號和連字符實施***。此外,它還使得數據庫權限可以限制到只允許特定的存儲過程執行,所有的用戶輸入必須遵從被調用的存儲過程的安全上下文,這樣就很難再發生注入式***了。
使用專業的漏洞掃描工具

  ***者們目前正在自動搜索***目標並實施***,其技術甚至可以輕易地被應用於其它的Web架構中的漏洞。企業應當投資於一些專業的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個完善的漏洞掃描程序不同於網絡掃描程序,它專門查找網站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發現的漏洞。

確保數據庫安全


  鎖定你的數據庫的安全,只給訪問數據庫的web應用功能所需的最低的權限,撤銷不必要的公共許可,使用強大的加密技術來保護敏感數據並維護審查跟蹤。如果web應用不需要訪問某些表,那麼確認它沒有訪問這些表的權限。如果web應用只需要只讀的權限,那麼就禁止它對此表的drop、insert、update、delete的權限,並確保數據庫打了最新補丁。
安全審評

  在部署應用系統前,始終要做安全審評。建立一個正式的安全過程,並且每次做更新時,要對所有的編碼做審評。開發隊伍在正式上線前會做很詳細的安全審評,然後在幾周或幾個月之後他們做一些很小的更新時,他們會跳過安全審評這關,“就是一個小小的更新,我們以後再做編碼審評好了”。請始終堅持做安全審評
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章