Web環境下SQL注入的檢測與防範

2021-03-31 08:57:00 字數 2160 閱讀 2102

sql注入攻擊源於英文「sql injection attack」。目前還沒有看到一種標準的定義,常見的是對這種攻擊形式、特點的描述。微軟技術中心從2個方面進行了描述:

(1)指令碼注入式的攻擊。

(2)惡意使用者輸入用來影響被執行的sql指令碼。

stephen kost給出了這種攻擊形式的另乙個特徵,「從乙個資料庫獲得未經 授權的訪問和直接檢索」。sql注入攻擊就其本質而言,他利用的工具是sql的語法,針對的是應用程式開發者程式設計過程中的漏洞。「當攻擊者能夠運算元據,往應用程式中插入一些sql語句時,sql注入攻擊就發生了」。

由於sql注入攻擊利用的是sql語法,使得這種攻擊具有廣泛性。理論上說,對於所有基於sql語言標準的資料庫軟體都是有效的,包括ms sql server,oracle,db2,sybase,mysql等。當然,各種軟體有自身的特點,最終的攻擊**可能不盡相同。sql注入攻擊的原理相對簡單,易於掌握和實施,並且整個inter***上連線有數目驚人的資料庫系統(僅在中國,截至2023年3月的統計就有82 900多個),在過去的幾年裡,sql攻擊的數量一直在增長。

2sql注入式攻擊的檢測及跟蹤

2.1sql攻擊檢測/防禦/跟蹤模型

針對sql攻擊的防禦,前人做過大量的工作,提出的解決方案包括 :

(1)封裝客戶端提交資訊。

(2)替換或刪除敏感字元/字串。

(3)遮蔽出錯資訊以及。

(4)在服務端正式處理之前對提交資料的合法性進行檢查等。

方案(1)的做法需要rdbms的支援,目前只有oracle採用該技術;方案(2)是一種不 完全的解決措施,舉例來說明他的弱點,當客戶端的輸入為「…ccmdmcmdd…」時,在對敏感字串「cmd」替換刪除以後,剩下的字元正好是「…cmd…」;方案(3)的實質是在服務端處理完畢之後進行補救,攻擊已經發生,只是阻止攻擊者知道攻擊的結果;方案(4)被多數的研究 者認為是最根本的解決手段,在確認客戶端的輸入合法之前,服務端拒絕進行關鍵性的處理操作。方案(4)與(2)的區別在於,方案(4)一旦檢測到敏感字元/字串,針對資料庫的操作即行中止,而方案(2)是對有問題的客戶端輸入做出補救,不中止程式後續操作。方案(2)雖然在一定程度上有效,但有「治標不治本」的嫌疑,新的攻擊方式正在被不斷發現,只要允許服務端程式使用這些提交資訊,就總有受到攻擊的可能。

因此,本文中針對sql注入攻擊的檢測/防禦/備案模型即基於提交資訊的合法性檢 查,在客戶端和服務端進行兩級檢查,只要任一級檢查沒有通過,提交的資訊就不會進入query語句,不會構成攻擊。在客戶端和服務端進行合法性檢查的函式基本相同。客戶端檢查的主要 作用是減少網路流量,降低伺服器負荷,將一般誤操作、低等級攻擊與高等級攻擊行為區分開來。技術上,客戶端的檢查是有可能被有經驗的攻擊者繞開的,在這種情形下,提交的資料被直接發往服務端,通過在伺服器端設定二級檢查就顯得十分必要。由於正常提交到服務端的資料已經在客戶端檢查過,因此,服務端檢查到的提交異常基本可以認定為惡意攻擊行為所致,中止提交資訊的處理,進行攻擊備案,並對客戶端給出出錯/警告提示。對應模型簡圖如圖1所示。

2.2檢 測

對提交資訊的檢查,主要包括資料型別檢查、資料長度檢查和敏感字元過濾。前兩項可利用函式直接辦到,敏感字元過濾則需要應用開發方做相應開發。經過總結,對

語句時必須用到的,因此可以針對這些敏感字元,設定過濾函式,在把這些上傳的引數結合到查詢語句之前對他們進行過濾。下面的2個函式即過濾模組的主要**:

2.3跟 蹤

提交非法字元的人,都有可能是sql注入攻擊者。但考慮到使用者在正常使用中的誤操作也有提交非法字元/字串的可能,因此客戶端的一級檢查無論對使用者誤操作,還是一般性攻擊,所做出處理措施只是中止資訊提交,給出友好的出錯提示。在經過一級檢查以後提交到伺服器端的資訊中仍然包括非法字元/字串的,惟一的可能是攻擊者繞開了客戶端的一級檢查。對於這種危險的訊號,伺服器端將從收到的提交資訊資料報中提取攻擊源的ip位址,存入資料庫備查,同時中止針對資料庫的操作.

3結語

由於sql注入攻擊針對的是應用開發過程中的程式設計不嚴密,因而對於絕大多數防火牆來說,這種攻擊是「合法」的。問題的解決只有依賴於完善程式設計。專門針對sql注入攻擊的工具較少,wpoison對於用asp,php進行的開發有一定幫助。本文中的ddl模型作為乙個整體解決方案,對**稍加變動也可用於sql server以外的關聯式資料庫。已經將該模型應用於某單位的web資料庫開發,取得了良好的效果。本文中給出的**在windows 2000 server+sql server 2000環境測試通過。

SQL注入環境的搭建

使用phpstudy搭建sql注入環境 所用環境的 是乙個印度人的開源專案平台。裡面包含了基本的各種注入型別,同時又有get和post型別,以及一些基本的繞過學習。可以直接zip壓縮包好一點 3.sqli labs master解壓到你的phpstudy安裝目錄裡面的www目錄下 4.開啟sqli ...

搭建mysql注入 常見的sql注入環境搭建

常見的sql注入環境搭建 by mirror王宇陽 time 2020 01 06 php mysql摘要 conn new mysqli 資料庫伺服器 username password database conn mysqli connect 資料庫伺服器 username password d...

WEB三大攻擊之 SQL注入與防護

from 定義 sql攻擊 英語 sql injection 簡稱注入攻擊,是發生於應用程式之資料庫層的安全漏洞。簡而言之,是在輸入的字串之中注入sql指令,在設計不良的程式當中忽略了檢查,那麼這些注入進去的指令就會被資料庫伺服器誤認為是正常的sql指令而執行,因此遭到破壞或是入侵。只要是支援批處理...