SQL注入及危害、防御手段的處理方法

一、什么是SQL注入
SQL(Structured Query Language),即結(jié)構(gòu)化查詢語言,用于操作關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。目前,大多數(shù)Web編程語言提供了操作SQL的接口,以方便與數(shù)據(jù)庫進(jìn)行交互。但是在開發(fā)Web應(yīng)用的過程中,由于忽視了代碼的健壯性和安全性,攻擊者可以構(gòu)造巧妙的SQL語句從而獲取到敏感數(shù)據(jù),因此導(dǎo)致了SQL這種攻擊方式的流行。
二、SQL注入的原理
在B/S模式中,用戶可以通過Get或Post等方式,對服務(wù)器發(fā)出HTTP請求。在服務(wù)器端,對數(shù)據(jù)庫執(zhí)行查詢操作,將查詢的結(jié)果返回瀏覽器端。黑客利用上述過程,將精心構(gòu)造的請求放到傳入的變量參數(shù)中,讓服務(wù)器端執(zhí)行惡意代碼,從而達(dá)到了讀取數(shù)據(jù)庫中敏感信息的效果,甚至將數(shù)據(jù)庫刪除。這一攻擊過程就是SQL注入,它的原理如圖所示。
從訪問流程上來看,攻擊者與普通的用戶是沒有任意區(qū)別的,都是將數(shù)據(jù)發(fā)送到服務(wù)端,服務(wù)端處理數(shù)據(jù)并返回結(jié)果。但是攻擊者對輸入數(shù)據(jù)進(jìn)行了精心的處理,在進(jìn)行SQL語句操作的時候,效果就會和正常流程完全不同,從而達(dá)到獲取整站數(shù)據(jù)的效果。
三、觸發(fā)SQL注入的方式
攻擊者通??梢允褂靡韵聨追N方式來觸發(fā)SQL注入漏洞:
(1)用戶的輸入。通常使用HTTP的GET或POST請求傳輸用戶數(shù)據(jù),通過修改POST包中的數(shù)據(jù)或者GET請求中URL參數(shù)值來實現(xiàn)惡意代碼注入。
(2)通過HTTP請求頭。服務(wù)器端可能會保存用戶的IP及User-Agent等信息,此時,攻擊者可以在X-Forwarded-For 或UA等請求頭字段中構(gòu)造語句進(jìn)行SQL注入。
(3)二階注入。攻擊者在HTTP請求中提交惡意輸入,服務(wù)端將惡意輸入保存在數(shù)據(jù)庫中,攻擊者緊接著提交第二次HTTP請求。為處理第二次請求,服務(wù)端需要查找數(shù)據(jù)庫,觸發(fā)了之前存儲的惡意輸入,并將結(jié)果返回給攻擊者。攻擊者需要通過兩次獨立請求才可以實現(xiàn)SOL注入的目的,這種攻擊方式因此得名二階注入。
四、SQL注入的特點
SQL注入具有以下特點:
(1)變種多。當(dāng)頁面可以返回錯誤的信息時,可以使用基于錯誤(Error-based)的注入方法。如果服務(wù)端對返回的錯誤進(jìn)行過濾,可以使用基于布爾(Bool-based)或基于時間(Time-based)的注入方法。另外,熟練的攻擊者會適當(dāng)調(diào)整攻擊參數(shù),以繞過特定字段的檢測,使傳統(tǒng)的特征匹配方法檢測不到注入。
(2)攻擊簡單。目前網(wǎng)上流行各種開發(fā)的SQL注入工具,使得發(fā)動攻擊的門檻大大降低。即使是毫無經(jīng)驗的“腳本小子”,借助這些工具也可以對目標(biāo)網(wǎng)站進(jìn)行攻擊。
(3)危害大。攻擊者一旦得手,輕則獲取整個網(wǎng)站的敏感數(shù)據(jù),重則寫入木馬,控制整個服務(wù)器,破壞力極大。在近幾年OWASP公布的Web應(yīng)用十大安全漏洞排名中,SOL注入穩(wěn)居榜首4。雖然其原理及利用方式并不復(fù)雜,但對目標(biāo)網(wǎng)站造成的破壞力巨大。
五、SQL注入的危害
(1)攻擊者未經(jīng)授權(quán)可以訪問數(shù)據(jù)庫中的數(shù)據(jù),盜取用戶的隱私以及個人信息,造成用戶的信息泄露。
(2)可以對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行增加或刪除操作,例如私自添加或刪除管理員賬號。
(3)如果網(wǎng)站目錄存在寫入權(quán)限,可以寫入網(wǎng)頁木馬。攻擊者進(jìn)而可以對網(wǎng)頁進(jìn)行篡改,發(fā)布一些違法信息等。
(4)經(jīng)過提權(quán)等步驟,服務(wù)器最高權(quán)限被攻擊者獲取。攻擊者可以遠(yuǎn)程控制服務(wù)器,安裝后門,得以修改或控制操作系統(tǒng)。
六、SQL注入的漏洞檢測
SQL注入漏洞的檢測分為手動檢測和自動檢測。手動檢測是安全測試人員對某個特定區(qū)間的URL進(jìn)行手工注入測試;自動檢測是利用爬蟲爬取網(wǎng)站的所有鏈接,對所有的鏈接自動進(jìn)行注入測試。在大型應(yīng)用中,手動檢測的工作量是巨大的,一般采用自動檢測的方式。
七、SQL注入的防御手段
防御SQL注入的核心思想是對用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格的檢查,并且對數(shù)據(jù)庫
的使用采用最小權(quán)限分配原則。目前SQL注入的防御手段有以下幾種:
(1)基于攻擊特征的匹配過濾。這是目前使用最為廣泛的方式,系統(tǒng)會將攻擊特征做成數(shù)據(jù)庫,一旦匹配到這些攻擊特征就會認(rèn)定檢測到SQL注入。這種方式可以有效的過濾大部分SQL注入攻擊,但是大大增加了程序的復(fù)雜度,同時可能影響到業(yè)務(wù)的正常查詢。
(2)對用戶輸入進(jìn)行轉(zhuǎn)義。例如,常見的SQL注入語句中都含有“‘’”,通過轉(zhuǎn)義將“‘’”轉(zhuǎn)義為“/”,SQL注入語句就會達(dá)不到攻擊者預(yù)期的執(zhí)行效果,從而實現(xiàn)對SQL注入進(jìn)行防御。
(3)數(shù)據(jù)類型進(jìn)行嚴(yán)格定義,數(shù)據(jù)長度進(jìn)行嚴(yán)格規(guī)定。比如查詢數(shù)據(jù)庫某條記錄的id,定義它為整型,如果用戶傳來的數(shù)據(jù)不滿足條件,要對數(shù)據(jù)進(jìn)行過濾。數(shù)據(jù)長度也應(yīng)該做嚴(yán)格限制,可以防止較長的SQL注入語句。
(4)嚴(yán)格限制網(wǎng)站訪問數(shù)據(jù)庫的權(quán)限。
(5)近幾年來,隨著機(jī)器學(xué)習(xí)與人工智能技術(shù)的火熱,基于機(jī)器學(xué)習(xí)的檢測SQL注入方法成為了新的研究方向。首先將樣本SQL語句轉(zhuǎn)換為特征向量集合,使用機(jī)器學(xué)習(xí)的方法進(jìn)行訓(xùn)練,將得到的模型投入使用,利用訓(xùn)練的模型檢測傳入的數(shù)據(jù)是否包含惡意SQL注入。
(6)其他防御措施。例如,避免網(wǎng)站顯示SQL執(zhí)行出錯信息,防止攻擊者使用基于錯誤的方式進(jìn)行注入;每個數(shù)據(jù)層編碼統(tǒng)一,防止過濾模型被繞過等。
Web應(yīng)用程序存在SQL注入,往往是因為在程序編寫的過程中,開發(fā)人員違背了“代碼與數(shù)據(jù)分離”原則。一方面,攻擊者可以任意更改輸入數(shù)據(jù);另一方面,攻擊者可以在數(shù)據(jù)里構(gòu)造代碼,讓服務(wù)器端把數(shù)據(jù)解析成代碼執(zhí)行。所以,只要遵循“代碼與數(shù)據(jù)分離”原則,對用戶端傳入的數(shù)據(jù)進(jìn)行嚴(yán)格檢查,從技術(shù)角度而言,可以實現(xiàn)完全防御SQL注入攻擊。
到此這篇關(guān)于SQL注入及危害、防御手段的處理方法的文章就介紹到這了,更多相關(guān)SQL注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- sqlmap 是一個自動SQL 射入工具。本文收集了一些利用Sqlmap做注入測試的TIPS,其中也包含一點繞WAF的技巧,便于大家集中查閱,歡迎接樓補(bǔ)充、分享。2014-07-29
- 近日,網(wǎng)站頻頻被黑。在網(wǎng)站里莫名其妙的多出一篇文 章,還有多出一組貼圖。正在納悶是誰可以登陸我的后臺發(fā)表文章和圖片的時候,我的qq彈出消息,一個陌生人給我發(fā)消息,2012-09-28
- 今晚群里朋友叫看個站,有sql防注入,繞不過,但是有發(fā)現(xiàn)記錄wrong的文件sqlin.asp。2012-05-15
- Structured Query Language即結(jié)構(gòu)化查詢語言,用于操作關(guān)系型數(shù)據(jù)庫管理系統(tǒng),本文給大家介紹SQL注入及危害、防御手段的處理方法,感興趣的朋友跟隨小編一起看看吧2022-10-10