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