劉建亮 喬興華
(航空工業(yè)沈陽飛機(jī)工業(yè)(集團(tuán))有限公司,遼寧 沈陽110000)
信息化時(shí)代網(wǎng)絡(luò)業(yè)務(wù)開始步入快速發(fā)展的時(shí)期,給原有的工作模式以及生活節(jié)奏帶來了巨大的變化以及便利,使信息共享成為了現(xiàn)實(shí)。但是,由于網(wǎng)絡(luò)的虛擬型導(dǎo)致它也格外的脆弱,容易受到各種攻擊,給數(shù)據(jù)以及信息的保存帶來了一定的影響。隨著人們對(duì)網(wǎng)絡(luò)技術(shù)的研究越來越透徹,很多人能夠通過遠(yuǎn)程操作對(duì)內(nèi)網(wǎng)進(jìn)行網(wǎng)絡(luò)攻擊,進(jìn)而獲取到攻擊目標(biāo)的使用權(quán)限,盜取其中的重要文件或者信息。SQL 注入攻擊作為一種隱秘、高效的信息盜取技術(shù),成為了黑客廣泛使用的一種攻擊技術(shù),針對(duì)這種現(xiàn)象,應(yīng)當(dāng)采取一定的有效措施,保證網(wǎng)絡(luò)信息的安全性和保密性,凈化網(wǎng)絡(luò)空間。
近年來,SQL 注入攻擊成為了網(wǎng)絡(luò)領(lǐng)域的熱門問題,不同的專家對(duì)于SQL 注入攻擊也有不同的定義。如國(guó)外的一位專家將SQL 注入攻擊定義成為是一種利用SQL 語言更改網(wǎng)頁應(yīng)用程序的一種操作行為,并通過這種行為獲取網(wǎng)頁中的各項(xiàng)數(shù)據(jù)以及信息。但是,不論根據(jù)哪一種定義來講,SQL 注入攻擊都屬于一種未經(jīng)許可的網(wǎng)絡(luò)攻擊行為,性質(zhì)極其惡劣[1]。SQL 注入攻擊主要是由于制作網(wǎng)頁系統(tǒng)人員工作疏忽而導(dǎo)致的,技術(shù)人員并沒有在代碼編寫的過程中檢查SQL 語句,也沒有將SQL 語言進(jìn)行參數(shù)化處理,這就給網(wǎng)絡(luò)黑客一定的可乘之機(jī)。例如,在生活中我們經(jīng)常能夠遇到的網(wǎng)站會(huì)員密碼泄露現(xiàn)象,就是由于SQL注入攻擊所導(dǎo)致的。
對(duì)于SQL 注入攻擊來講,一般的防火墻是沒有任何作用的,它可以直接越過防火墻來獲取數(shù)據(jù)庫的使用權(quán)限,因此這種攻擊與其他攻擊技術(shù)相比具有不同的特點(diǎn),主要表現(xiàn)在以下三面:第一,操作難度較低。這種攻擊技術(shù)所需要的難度較小,目前在網(wǎng)絡(luò)上擁有大批的SQL 注入攻擊工具,只要利用這種道具就可以更改網(wǎng)頁系統(tǒng)。如果個(gè)別網(wǎng)站存在著SQL 注入漏洞,攻擊者則可以直接對(duì)目標(biāo)服務(wù)器進(jìn)行控制。第二,使用較為廣泛。SQL 注入漏洞的存在范圍較為廣泛,因此SQL 注入攻擊的使用較為普遍?;趯?duì)SQL 注入攻擊的研究數(shù)據(jù)來看,在很多類型的編程語言中都出現(xiàn)了同類型的漏洞,給網(wǎng)頁安全帶來嚴(yán)重影響。第三,具有極高的危害性。SQL 注入攻擊不僅可以盜取網(wǎng)站中的信息,同時(shí)還能使攻擊者具有操作權(quán),可以隨意改寫網(wǎng)頁內(nèi)容、更換系統(tǒng)管理員等[2]。
SQL 注入攻擊能夠得以實(shí)現(xiàn)的方式主要包括以下兩個(gè)方面:第一,向應(yīng)用程序中輸入代碼,構(gòu)成動(dòng)態(tài)的SQL 語句,利用SQL 語句來獲取目標(biāo)系統(tǒng)的數(shù)據(jù)庫權(quán)限,或者對(duì)其進(jìn)行攻擊;第二,當(dāng)編寫的程序代碼在進(jìn)行存儲(chǔ)時(shí),同時(shí)會(huì)將系統(tǒng)沒有進(jìn)行過篩選的用戶數(shù)據(jù)以及信息也存儲(chǔ)進(jìn)數(shù)據(jù)庫,當(dāng)這些字符串在傳遞的過程中,也可以對(duì)其進(jìn)行SQL 注入攻擊。目前經(jīng)常使用的攻擊方式為對(duì)數(shù)據(jù)庫進(jìn)行直接攻擊,利用動(dòng)態(tài)SQL 語句直接攻擊數(shù)據(jù)庫。攻擊者首先會(huì)在系統(tǒng)運(yùn)行過程時(shí)所傳遞的字符串中插入惡意代碼,如果所插入的代碼與SQL 語句的運(yùn)行方式相同,同時(shí)還滿足系統(tǒng)沒有驗(yàn)證信息的要求,那么網(wǎng)頁程序就會(huì)按照插入代碼之后的規(guī)則和狀態(tài)來運(yùn)行。
由于SQL 注入攻擊無法被防火墻所阻擋,并且隱蔽性極強(qiáng),與正常的網(wǎng)絡(luò)訪問沒有差別,因此必然需要使用人工手段來對(duì)SQL 注入攻擊進(jìn)行檢測(cè)[3]。首先,需要定期查看IIS 日志中的文件信息以及文件數(shù)量。ISS 日記所記載的是登錄網(wǎng)站系統(tǒng)進(jìn)行訪問時(shí)所留下的IP 地址、訪問記錄、用戶信息等,當(dāng)發(fā)生SQL 注入攻擊時(shí),攻擊者會(huì)頻繁的訪問其中一個(gè)頁面的文件內(nèi)容,因此IIS 中的日志數(shù)量會(huì)持續(xù)增加。其次,可以利用數(shù)據(jù)庫的信息來判斷是否發(fā)生SQL 注入攻擊。SQL 注入攻擊通常是利用一些軟件來進(jìn)行的,所以在攻擊過程中數(shù)據(jù)庫會(huì)出現(xiàn)臨時(shí)的表格,這就是受到SQL 注入攻擊的跡象。在這些表格中會(huì)有與正常數(shù)據(jù)不同的結(jié)構(gòu),并且其中有大量的外來信息,是判斷SQL注入攻擊方式的有效方法。最后,可以通過檢驗(yàn)用戶輸入的信息和數(shù)據(jù)來進(jìn)行判斷。系統(tǒng)可以利用正則表達(dá)式來進(jìn)行數(shù)據(jù)檢驗(yàn),或者限制用戶可以輸入的字符長(zhǎng)度。系統(tǒng)還可以將單引號(hào)以及雙- 兩種符號(hào)互換,檢測(cè)用戶是否為正常訪問系統(tǒng)的用戶[4]。
當(dāng)用戶向系統(tǒng)輸入字符的過程中,需要對(duì)輸入內(nèi)容進(jìn)行限制,避免出現(xiàn)SQL 注入攻擊。在輸入過程中,用戶不可以輸入二進(jìn)制數(shù)據(jù)、注釋字符以及轉(zhuǎn)系序列等,這些都不是正常輸入的內(nèi)容,通常都是攻擊者所需要使用的代碼和符號(hào)。通過對(duì)個(gè)別數(shù)據(jù)和語句的過濾,能夠有效防范SQL 注入攻擊,降低了惡意腳本的攻擊幾率,也阻止了緩沖區(qū)數(shù)據(jù)的泄露。另外,同時(shí)還應(yīng)該過濾掉有關(guān)于用戶信息的數(shù)據(jù),使得用戶登錄網(wǎng)站所查詢的內(nèi)容只能夠從文本框中來獲取,保證網(wǎng)頁信息的安全性。例如,在目前很多網(wǎng)站輸入用戶登錄信息時(shí),都對(duì)密碼有一定的要求,必須要求擁有數(shù)字、英文以及符號(hào),或者要求某一種信息位于前面,個(gè)別網(wǎng)站還會(huì)限制用戶所輸入的符號(hào)數(shù)量。這種要求約束了用戶,縮小了用戶的權(quán)限,避免了其他代碼插入的狀況,有效的防范了SQL 注入攻擊,保護(hù)了系統(tǒng)的安全[5]。
這種方法是一種最為有效的防范措施,對(duì)SQL 注入攻擊的防范起到了重要作用,一定程度上保護(hù)了用戶的隱私以及用戶的安全。這一種方法需要在開發(fā)系統(tǒng)的過程中所設(shè)定的,當(dāng)設(shè)計(jì)數(shù)據(jù)庫的系統(tǒng)或者利用鏈接獲取數(shù)據(jù)庫信息時(shí),有個(gè)別位置需要進(jìn)行數(shù)值填寫。當(dāng)出現(xiàn)需要填寫數(shù)據(jù)的情況時(shí),就用參數(shù)來填寫,這種方法就叫做參數(shù)化查詢。參數(shù)化查詢能夠有效的防止SQL 注入攻擊出現(xiàn),同時(shí)還能夠提升原本所設(shè)定的執(zhí)行計(jì)劃可以使用的固定次數(shù),對(duì)數(shù)據(jù)庫系統(tǒng)的運(yùn)行有重要意義,一定程度上降低了數(shù)據(jù)庫的工作壓力。當(dāng)系統(tǒng)中SQL 語句在運(yùn)行的過程中,就會(huì)將參數(shù)化查詢進(jìn)行緩存,以達(dá)到提高原有的計(jì)劃執(zhí)行次數(shù)的目的[6]。
在以往的生活中,人們需要通過紙質(zhì)書籍、報(bào)紙來獲取信息,使得信息的傳遞出現(xiàn)了一定的延遲。在網(wǎng)絡(luò)技術(shù)的支持下,人們只需要通過瀏覽網(wǎng)頁就能夠達(dá)到獲取信息的目的,給社會(huì)的發(fā)展帶來了新的活力。在信息高速傳輸?shù)纳鐣?huì)環(huán)境下,瀏覽器的網(wǎng)頁中存儲(chǔ)了大量的數(shù)據(jù)和信息,而部分負(fù)責(zé)開發(fā)系統(tǒng)的技術(shù)人員并不會(huì)對(duì)這些數(shù)據(jù)以及信息進(jìn)行合理化判斷,進(jìn)而導(dǎo)致網(wǎng)頁出現(xiàn)了一定的安全隱患,給攻擊者留下可以利用SQL 注入來獲取這些信息的機(jī)會(huì)。SQL 注入不僅會(huì)造成數(shù)據(jù)流失,還可能會(huì)讓攻擊者獲得網(wǎng)絡(luò)系統(tǒng)的控制權(quán),改變網(wǎng)絡(luò)頁面中的內(nèi)容。這就需要網(wǎng)頁管理員具有一定的防范意識(shí),對(duì)SQL 注入攻擊進(jìn)行有效的防范,防止信息泄露的問題發(fā)生。