SQL注入及危害、防御手段的處理方法
一、什么是SQL注入
SQL(Structured Query Language),即結(jié)構(gòu)化查詢語(yǔ)言,用于操作關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。目前,大多數(shù)Web編程語(yǔ)言提供了操作SQL的接口,以方便與數(shù)據(jù)庫(kù)進(jìn)行交互。但是在開發(fā)Web應(yīng)用的過程中,由于忽視了代碼的健壯性和安全性,攻擊者可以構(gòu)造巧妙的SQL語(yǔ)句從而獲取到敏感數(shù)據(jù),因此導(dǎo)致了SQL這種攻擊方式的流行。
二、SQL注入的原理
在B/S模式中,用戶可以通過Get或Post等方式,對(duì)服務(wù)器發(fā)出HTTP請(qǐng)求。在服務(wù)器端,對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢操作,將查詢的結(jié)果返回瀏覽器端。黑客利用上述過程,將精心構(gòu)造的請(qǐng)求放到傳入的變量參數(shù)中,讓服務(wù)器端執(zhí)行惡意代碼,從而達(dá)到了讀取數(shù)據(jù)庫(kù)中敏感信息的效果,甚至將數(shù)據(jù)庫(kù)刪除。這一攻擊過程就是SQL注入,它的原理如圖所示。

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

