張季
摘要:Web中數(shù)據(jù)庫的應用越來越廣泛,SQL的注入也成為了黑客攻擊數(shù)據(jù)庫比較常見的手段。文章對SQL注入攻擊的一些相關原理進行了簡要的說明。并對現(xiàn)階段SQL注入攻擊的特點進行了研究和剖析,然后在這個基礎之上提供了幾種對SQL進行預防的防護方法。并且對這些方法的使用情況進行了必要的說明
關鍵詞:SQL注入 研究 預防對策
隨著互聯(lián)網(wǎng)的發(fā)展,大量的web網(wǎng)站開始涌現(xiàn),極大地方便了人們的信息獲取需求。與此同時,黑客針對網(wǎng)站的攻擊也屢屢出現(xiàn),造成了或多或少的經(jīng)濟損失現(xiàn)代社會,而近年來互聯(lián)網(wǎng)技術的發(fā)展迅猛,以因特網(wǎng)為基礎平臺的Web應用系統(tǒng)在計算機的各個領域都有了越來越廣泛的用途。譬如企業(yè)的辦公系統(tǒng)以及電子商務系統(tǒng)等等。這些系統(tǒng)絕大多數(shù)都是采用的HTTP的方式進行數(shù)據(jù)的傳遞,然后將這些數(shù)據(jù)相關組織的數(shù)據(jù)庫當中,這些數(shù)據(jù)對一些不法分子來說具有非常大的吸引力,這就給數(shù)據(jù)的安全性造成了很大的安全隱患,比較典型的就是SQL的注入。
一、SQL注入
從目前的情況來看,現(xiàn)在的Web應用程序在一般情況下采用的都是依靠數(shù)據(jù)庫為用戶進行寫、度數(shù)據(jù)的方法,但是,在另一方面,由于從事程序編程人員的水平參差不齊,絕大多數(shù)編程的工作者沒有在編寫程序的時候對用戶數(shù)據(jù)的合法性進行辨別,這就導致在應用程序的過程中出現(xiàn)了安全隱患。SQL注入,簡單的來說,就是不法分子利用高科技手段改變原來數(shù)據(jù)的查詢語句,并把這個命令提交給服務器,并在這個基礎之上執(zhí)行惡意的SQL命令然后不法分子在依據(jù)數(shù)據(jù)返回的結果中獲取攻擊者想要得到的信息,進行下一步的不法活動。
(一)關于SQL的注入原理
眾所周知,SQL注入的目的就是對數(shù)據(jù)庫進行攻擊,然后在攻擊數(shù)據(jù)庫的基礎之上在攻擊其所在的服務器,而這種攻擊的主要方式就是不法分子將代碼在參數(shù)中進行植入,而這些參數(shù)會被植入SQL命令中加已執(zhí)行。例如將惡意的代碼插入到字符串當中,然后在這個基礎之上將這些字符串保存在數(shù)據(jù)庫當中的數(shù)據(jù)表中,或者將其當作元數(shù)據(jù),當被存儲的字符串植入到動態(tài)的SQL命令當中來的時候,這些惡意的代碼就會被執(zhí)行。雖然數(shù)據(jù)庫的類型是多種多樣的,但是SQL注入攻擊的原理和基本過程確是基本上都一樣的。結合其他學者的相關研究,本文將SQL注入的類別分為用戶登錄類別以及其他類兩種類型。在用戶登錄的類別當中,不法分子可以繞過存在安全隱患的登錄框進行登錄,而在其他類別中,其則需要對攻擊的對象進行更深一步的分析,并對數(shù)據(jù)庫的類型有一定的了解,只有通過這樣的途徑,其才能實現(xiàn)SQL的注入,也只有在這個基礎之上才能毒數(shù)據(jù)庫進行攻擊。
我們都知道,SQL的注入對數(shù)據(jù)庫的危害是非常大的,攻擊者不僅可以利用已經(jīng)存在的SQL漏洞對服務器進行攻擊,對數(shù)據(jù)庫的敏感信息進行盜竊、竊取,甚至還有的不法分子會對服務器的信息進行肆意的篡改和刪除,技術水平高的不法分子還有可能種植后門程序,這種行為導致的最嚴重的后果就是當不法分子一旦獲取該服務器的最高管理權限,其就可能實現(xiàn)整個操作系統(tǒng)的控制,有的甚至導致系統(tǒng)無法進行日常的運行甚至會導致整個系統(tǒng)的癱瘓。
二、關于SQL注入攻擊的防范措施
(一)參數(shù)化語句
由于數(shù)據(jù)庫所執(zhí)行的多數(shù)都是由SQL查詢創(chuàng)建成的字符串,因此該構造方式極易導致應用系統(tǒng)受到SQL注入攻擊。一般情況下,在編程語言和數(shù)據(jù)庫訪問API時,可采用占位符或綁定變量的方法為SQL查詢提供必要參數(shù),以此替代對用戶輸入進行操作。這種稱為參數(shù)化查詢的方法更加安全可靠,它能夠盡可能地避免應用中常見的SQL注入漏洞,并可在多數(shù)情況下代替現(xiàn)有的動態(tài)查詢,對一般數(shù)據(jù)庫來說其效率更高。參數(shù)化查詢語句能夠為數(shù)據(jù)庫提供預處理語句功能,從而優(yōu)化查詢并進一步提高后續(xù)查詢性能
(二)輸入驗證
輸入驗證是一種功能強大的SQL注入控制手段。所謂輸入驗證,就是通過對應用程序的輸入數(shù)據(jù)進行驗證,從而保證其符合應用程序中已定義標準的過程。此方法既可以將參數(shù)限制成固定的某種類型,也可以通過使用正則表達式或業(yè)務邏輯進行輸入驗證。
(三)編碼輸出
除驗證輸入方法外,還應對不同模塊或部分應用間互相傳遞的內容進行編碼。在SQL語境中,對發(fā)送至數(shù)據(jù)庫的內容進行編碼或引用是必要的操作,這樣能夠保證內容被正確的處理。除此以外,當正在使用的數(shù)據(jù)未經(jīng)過嚴格審查,或數(shù)據(jù)來自第三方時,還應對數(shù)據(jù)庫信息進行編碼。該方法適用于無法使用參數(shù)化查詢語句的情況,此時則需對發(fā)送至數(shù)據(jù)庫的數(shù)據(jù)進行編碼,但如果當數(shù)據(jù)庫查詢某個值沒有編碼時,該應用程序仍然易受到SQL注入的攻擊。
通過上述分析,我們可以發(fā)現(xiàn)SQL注入對數(shù)據(jù)庫的危害是非常大的,這也對現(xiàn)代社會的信息犯罪提供了一種新的犯罪手段,最大限度的減少SQL注入漏洞可以有效的對SQL的注入風險進行預防,正如上文提到的,我們一定要結合SQL注入的原理來探討SQL的預防方法,只有這樣做,其防御措施才能夠做到實時有效。從目前的情況來看,市面上已經(jīng)出現(xiàn)了一些能夠自動監(jiān)測SQL注入的工具和攻擊工具,但是這些都是最基本的東西,要想更進一步的對SQL注入進行更加有效的預防,還是有必要對SQL注入的原理進行更加深入的研究,然后在這個基礎之上采取正確、合理的應對措施,最好能做到防患于未然,只要做到這些,SQL的注入危害還是可以避免的。