• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      SQL注入攻擊與防護(hù)策略分析

      2017-03-18 19:31:29鄭智釗
      科學(xué)與財(cái)富 2017年4期

      摘 要:針對(duì)WEB應(yīng)用安全問(wèn)題中最常見(jiàn)到的SQL注入攻擊,本文對(duì)攻擊的原理、手段和過(guò)程做了介紹和剖析,并針對(duì)SQL注入的特點(diǎn)指出了對(duì)于提高網(wǎng)站安全的策略。

      關(guān)鍵詞:SQL注入;WEB安全;網(wǎng)站防護(hù)措施

      引言

      近年來(lái),WEB應(yīng)用成為了人們?nèi)粘I?、工作、學(xué)習(xí)中必不可少的工具和信息來(lái)源,隨之而來(lái)的是信息安全問(wèn)題層出不窮。2016年國(guó)內(nèi)某專業(yè)信息安全平臺(tái)被發(fā)現(xiàn)存在SQL注入漏洞,導(dǎo)致大量用戶信息被泄露。由于絕大多數(shù)當(dāng)今網(wǎng)站都是通過(guò)數(shù)據(jù)庫(kù)存儲(chǔ)用戶信息和網(wǎng)站數(shù)據(jù),這導(dǎo)致SQL注入攻擊成為網(wǎng)站最常見(jiàn)到的安全風(fēng)險(xiǎn)來(lái)源之一。

      1.SQL注入攻擊原理

      SQL注入攻擊是通過(guò)操作輸入來(lái)修改SQL語(yǔ)句,用以達(dá)到執(zhí)行代碼對(duì)WEB服務(wù)器進(jìn)行攻擊的方法。簡(jiǎn)單的說(shuō)就是在post/get web表單、輸入域名或頁(yè)面請(qǐng)求的查詢字符串中插入SQL命令,最終使web服務(wù)器執(zhí)行惡意命令的過(guò)程。可以通過(guò)一個(gè)例子簡(jiǎn)單說(shuō)明SQL注入攻擊。

      假設(shè)某網(wǎng)站頁(yè)面顯示時(shí)URL 為http://www.example.com?test=123,此時(shí)URL實(shí)際向服務(wù)器傳遞了值為123的變量test,這表明當(dāng)前頁(yè)面是對(duì)數(shù)據(jù)庫(kù)進(jìn)行動(dòng)態(tài)查詢的結(jié)果。由此,我們可以在URL中插入惡意的SQL語(yǔ)句并進(jìn)行執(zhí)行。另外,在網(wǎng)站開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員使用動(dòng)態(tài)字符串構(gòu)造SQL語(yǔ)句,用來(lái)創(chuàng)建所需的應(yīng)用,這種情況下SQL語(yǔ)句在程序的執(zhí)行過(guò)程中被動(dòng)態(tài)的構(gòu)造使用,可以根據(jù)不同的條件產(chǎn)生不同的SQL語(yǔ)句,比如需要根據(jù)不同的要求來(lái)查詢數(shù)據(jù)庫(kù)中的字段。這樣的開(kāi)發(fā)過(guò)程其實(shí)為SQL注入攻擊留下了很多的可乘之機(jī)。

      2.SQL注入攻擊常見(jiàn)方法和過(guò)程

      2.1尋找SQL注入漏洞

      確定網(wǎng)站存在SQL注入漏洞的途徑一般有兩種,第一種是可以利用網(wǎng)站的錯(cuò)誤提示,如果網(wǎng)站開(kāi)啟了錯(cuò)誤顯示,攻擊者就可以通過(guò)在輸入?yún)?shù)的地方反復(fù)調(diào)整發(fā)送的參數(shù),通過(guò)頁(yè)面出現(xiàn)的錯(cuò)誤信息,推測(cè)出網(wǎng)站使用的數(shù)據(jù)庫(kù)和開(kāi)發(fā)語(yǔ)言信息。如果網(wǎng)站管理員關(guān)閉了錯(cuò)誤信息提示,攻擊者可以采用盲注的技巧來(lái)進(jìn)行反復(fù)嘗試。盲注是利用數(shù)據(jù)庫(kù)查詢的輸入審查漏洞從數(shù)據(jù)庫(kù)提取信息或提取與數(shù)據(jù)庫(kù)查詢相關(guān)的信息的技術(shù)。如在URL 中輸入login.php?username=admin and 1=1和login.php?username=admin and 1=2,如果前者能正常返回信息,而后者不能,基本上就可以認(rèn)定網(wǎng)站存在SQL注入漏洞。這是因?yàn)?=2的表達(dá)式不成立,所以即使username傳入了正確的數(shù)值也是無(wú)法通過(guò),因此可以判讀出該網(wǎng)站可以通過(guò)usernamer參數(shù)進(jìn)行注入。

      2.2判斷數(shù)據(jù)庫(kù)

      獲得網(wǎng)站的數(shù)據(jù)庫(kù)類型是SQL注入提取重要數(shù)據(jù)的前提條件之一,可以通過(guò)常見(jiàn)的技術(shù)架構(gòu)進(jìn)行判斷,如aps.net常和SQL Server一起使用,而PHP往往使用MySQL,JSP會(huì)配合Oracle或MySLQ。而WEB服務(wù)環(huán)境也可以提供線索,如運(yùn)行IIS的服務(wù)環(huán)境往往采用SQL Server數(shù)據(jù)庫(kù),使用TOMCAT的更大的可能是MySQL或Oracle。另外,還可以通過(guò)詳細(xì)的錯(cuò)誤信息判斷數(shù)據(jù)庫(kù)的版本,比如添加單引號(hào)作為注入?yún)?shù),根據(jù)數(shù)據(jù)庫(kù)產(chǎn)生的語(yǔ)法錯(cuò)誤信息,就可以判斷出數(shù)據(jù)庫(kù)的種類。

      2.3攻擊數(shù)據(jù)庫(kù)系統(tǒng)

      攻擊數(shù)據(jù)庫(kù)的目的是為了獲得數(shù)據(jù)庫(kù)中有價(jià)值的數(shù)據(jù)信息,進(jìn)而可以為控制整個(gè)WEB系統(tǒng)做鋪墊。獲得數(shù)據(jù)庫(kù)中數(shù)據(jù)可以遵循層次化的方法,首先提取數(shù)據(jù)庫(kù)的名稱,然后提取表、列,最后才是數(shù)據(jù)本身。通常,可以通過(guò)訪問(wèn)專門保存表示各種數(shù)據(jù)庫(kù)結(jié)構(gòu)的表,比如MySQL中,這些信息保存在information_schema數(shù)據(jù)庫(kù)中。在該數(shù)據(jù)庫(kù)中的schemata表中存儲(chǔ)著數(shù)據(jù)庫(kù)名,tables表中存儲(chǔ)著表名,columns表中存儲(chǔ)著字段名,通過(guò)以上的信息,再獲得數(shù)據(jù)庫(kù)表中的內(nèi)容就輕而易舉了。

      2.4控制WEB系統(tǒng)

      在獲得數(shù)據(jù)庫(kù)中數(shù)據(jù)信息后,可以通過(guò)對(duì)具有管理權(quán)限的賬號(hào)信息入手,通過(guò)登錄帳號(hào),使用網(wǎng)站后臺(tái)上傳功能上傳木馬程序,或添加惡意代碼,最終甚至可以獲得服務(wù)器的完全控制權(quán)限。

      3.SQL注入攻擊防護(hù)策略

      SQL注入漏洞的產(chǎn)生,都是因?yàn)橄到y(tǒng)要接受來(lái)自客戶端輸入的變量或者URL傳遞的參數(shù),為此,開(kāi)發(fā)者一定要遵循“外部數(shù)據(jù)不可信”原則,對(duì)于用戶輸入的內(nèi)容或傳遞的參數(shù),要時(shí)刻保持警惕。因此對(duì)于SQL注入的防護(hù)策略通常要確保系統(tǒng)傳遞的變量符合開(kāi)發(fā)者的設(shè)計(jì)要求。

      3.1變量檢測(cè)

      對(duì)于數(shù)據(jù)庫(kù)中有固定數(shù)據(jù)類型的變量,在SQL語(yǔ)句執(zhí)行前,應(yīng)該對(duì)變量的類型進(jìn)行嚴(yán)格的檢查,確保變量是開(kāi)發(fā)者預(yù)想的。比如系統(tǒng)中存在名為id的數(shù)字字段,那么系統(tǒng)在執(zhí)行SQL語(yǔ)句前確保變量id的類型是int型的。

      3.2過(guò)濾特殊符號(hào)

      當(dāng)發(fā)生SQL注入攻擊時(shí),攻擊者在提交的SQL語(yǔ)句會(huì)包含一些特殊的字符或字符串,如單引號(hào)、雙引號(hào)、反斜杠、NULL等。這樣,可以通過(guò)使用數(shù)據(jù)庫(kù)系統(tǒng)自帶函數(shù)或編寫(xiě)相關(guān)驗(yàn)證程序?qū)τ脩糨斎氲倪@類符號(hào)進(jìn)行轉(zhuǎn)義或者過(guò)濾,從而達(dá)到限制SQL注入的目的。

      3.3合理使用預(yù)編譯

      預(yù)編譯是吧一些格式固定的SQL 編譯后,存放在內(nèi)存池中,當(dāng)需要執(zhí)行相同SQL語(yǔ)句時(shí),就可以直接執(zhí)行以及預(yù)編譯的語(yǔ)句,不同的數(shù)據(jù)庫(kù)系統(tǒng)都有預(yù)編譯機(jī)制。因此,在當(dāng)遇到類似login.php?username=admin and 1=1的注入攻擊時(shí),預(yù)編譯SQL語(yǔ)句 WHERE username=?可以阻止攻擊的成功。

      3.4對(duì)關(guān)鍵數(shù)據(jù)信息加密

      對(duì)于數(shù)據(jù)庫(kù)中諸如賬號(hào)密碼的信息應(yīng)該避免使用明文存儲(chǔ),可以使用AES、RSA、MD5等算法對(duì)數(shù)據(jù)進(jìn)行加密存儲(chǔ),這樣即使系統(tǒng)被SQL注入成功,攻擊者也無(wú)法輕易獲得關(guān)鍵數(shù)據(jù)信息的內(nèi)容。

      4.結(jié)語(yǔ)

      SQL注入一直是網(wǎng)站重要的安全風(fēng)險(xiǎn)來(lái)源,作為網(wǎng)站的開(kāi)發(fā)者和運(yùn)維人員應(yīng)該意識(shí)到SQL注入攻擊是一種綜合的攻擊手段。為了避免SQL注入帶來(lái)的影響,開(kāi)發(fā)者和運(yùn)維人員應(yīng)該從網(wǎng)站設(shè)計(jì)入手,并對(duì)服務(wù)器、數(shù)據(jù)庫(kù)管理等多方面加以規(guī)范,確保網(wǎng)站可以安全可靠的運(yùn)行。

      參考文獻(xiàn):

      [1]鄭成興.網(wǎng)絡(luò)入侵防范的理論與實(shí)踐[m].機(jī)械工業(yè)出版社,2012

      [2]黃健.計(jì)算機(jī)信息安全技術(shù)及防護(hù)[J].信息安全與技術(shù),2012,4.

      [3]陰國(guó)富.基于SQL注人的安全防范檢測(cè)技術(shù)研究[J].河南科學(xué),2009,27

      [4]李虎軍.淺談網(wǎng)站SQL注入攻擊防護(hù)策略研究[J].電腦知識(shí)與技術(shù),2016,3

      作者簡(jiǎn)介:

      鄭智釗,男,1983年出生,工學(xué)學(xué)士,網(wǎng)絡(luò)工程師,工作單位:哈爾濱鐵道職業(yè)技術(shù)學(xué)院,主要研究方向:計(jì)算機(jī)科學(xué)與應(yīng)用。

      乌鲁木齐市| 新田县| 苗栗市| 津南区| 武强县| 略阳县| 虞城县| 大庆市| 合作市| 塔河县| 呼玛县| 偏关县| 建湖县| 安仁县| 寻甸| 正蓝旗| 登封市| 理塘县| 榆树市| 海南省| 珠海市| 赣州市| 临颍县| 忻城县| 晋城| 龙游县| 衡阳市| 红河县| 黑龙江省| 隆安县| 大姚县| 广灵县| 西乌珠穆沁旗| 溆浦县| 三亚市| 汕尾市| 黑水县| 华池县| 海晏县| 阆中市| 麻栗坡县|