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