• 
    

    
    

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

      ?

      開發(fā)者視角下網(wǎng)站SQL注入漏洞及防范

      2016-04-07 07:44:37仇善梁
      關(guān)鍵詞:開發(fā)者攻擊者漏洞

      仇善梁

      (江蘇省揚州商務(wù)高等職業(yè)學(xué)校,江蘇揚州 225000)

      開發(fā)者視角下網(wǎng)站SQL注入漏洞及防范

      仇善梁

      (江蘇省揚州商務(wù)高等職業(yè)學(xué)校,江蘇揚州 225000)

      通過對網(wǎng)站SQL注入漏洞的成因和常見類型進行分析,在代碼編寫層面提出六點防范措施,幫助開發(fā)者盡量從源頭上杜絕此類安全漏洞,避免重復(fù)勞動,提高網(wǎng)站運行的安全性。

      SQL注入;漏洞;攻擊

      0 引言

      隨著計算機技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,信息化給人們的工作、生活和學(xué)習(xí)帶來了極大的便利,與此同時,網(wǎng)絡(luò)信息安全也成為信息社會的重要話題。網(wǎng)絡(luò)信息安全包含很多領(lǐng)域,其中網(wǎng)站的安全是其重要內(nèi)容之一。根據(jù)國家互聯(lián)網(wǎng)應(yīng)急中心發(fā)布的《2015年中國互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報告》顯示,2015年我國境內(nèi)被篡改的網(wǎng)站數(shù)量為24 550個,其中政府網(wǎng)站有898個;被植入后門的網(wǎng)站數(shù)量為75 028個,其中政府網(wǎng)站有3 514個[1]。SQL注入漏洞是網(wǎng)站漏洞的重要形式之一,也是危害性比較大的漏洞之一,2015年某市人才網(wǎng)因存在SQL注入漏洞,導(dǎo)致240萬條個人信息被泄露,這充分說明當(dāng)前網(wǎng)站的信息安全形勢比較嚴峻。

      1 漏洞成因及常見方式

      軟件漏洞是指軟件生命周期中涉及安全的設(shè)計錯誤、編碼缺陷和運行故障等[2]。SQL語言是目前數(shù)據(jù)庫使用的主流操作語言,SQL注入攻擊也是最常見的Web攻擊手段之一。所謂SQL注入漏洞,是指應(yīng)用程序未對用戶輸入的內(nèi)容進行充分的有效性和合法性驗證,導(dǎo)致非法用戶在URL查詢字符串或表單提交的數(shù)據(jù)字段中插入特殊字符,從而可以動態(tài)構(gòu)造出非法的SQL語句,在數(shù)據(jù)庫正常執(zhí)行后,實現(xiàn)SQL注入[3],從而達到竊取數(shù)據(jù)、繞過驗證或破壞數(shù)據(jù)等目的。常見的SQL注入方式有重言式注入、錯誤邏輯式注入、破壞式注入、附加命令式注入等。

      1.1 重言式注入

      重言式通常稱為永真式,這種方式通過和不等式配合使用,使SQL語句變成永真式或永假式,據(jù)此來判斷請求的字段是否存在漏洞,實現(xiàn)繞過會話驗證的注入方式。用戶登錄是開發(fā)網(wǎng)站程序最常用的功能模塊,本文就以驗證用戶登錄為例,雖然我們相信一般程序員不會使用這種寫法,但這是SQL注入的典型演示案例:

      上述語句下劃線部分為用戶輸入內(nèi)容,如果用戶正常輸入賬號和密碼,此語句沒有問題,但是如果攻擊者將賬號和密碼都輸入'or''=',那么語句就變成:

      很顯然,如按上述語句執(zhí)行,攻擊者用單引號的方式即可改變SQL語句原來的邏輯結(jié)構(gòu),使用SQL內(nèi)置關(guān)鍵詞“or”,使原來的判斷語句變成永遠為真,這樣可以繞過用戶驗證,成功獲取相關(guān)權(quán)限。類似語句還有多種其他寫法,甚至可以自己插入一個新用戶,方便地繞過驗證,進入系統(tǒng)。

      1.2 錯誤邏輯式注入

      此類注入是攻擊者故意構(gòu)造錯誤的SQL語句,系統(tǒng)執(zhí)行后一般會報錯,只要在IE選項設(shè)置里去掉“將顯示友好HTTP錯誤信息”的勾選項,客戶端瀏覽器一般會顯示詳細的報錯信息,以便攻擊者窺探想要得到的相關(guān)信息。我們通過SQL的convert函數(shù)來實現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換,使系統(tǒng)強制將用戶名轉(zhuǎn)換成整數(shù),導(dǎo)致系統(tǒng)報錯。舉例如下:

      毫無疑問,在上述SQL語句的執(zhí)行過程中,只要用戶名不是數(shù)字格式,執(zhí)行后肯定會報錯,如果系統(tǒng)沒有對相關(guān)錯誤信息進行有效地處理或屏蔽,系統(tǒng)就會如實地顯示相關(guān)錯誤信息。攻擊者手中一般都有常規(guī)對照表,針對不同數(shù)據(jù)庫類型收錄了不同的關(guān)鍵詞和命令方式等,即可以通過不斷改變注入操作,窺探想要得到的信息。

      1.3 破壞式注入

      此類注入是通過附加命令實現(xiàn)數(shù)據(jù)破壞或數(shù)據(jù)竊取,導(dǎo)致網(wǎng)站系統(tǒng)拒絕服務(wù)等,舉例如下:

      執(zhí)行上述語句后,select語句執(zhí)行后沒有數(shù)據(jù)受影響,而由于單引號被“--”注釋了,直接執(zhí)行了drop語句,即可刪除整個用戶表,因此這種注入方式的危害性非常大。依照drop語句的執(zhí)行方法,還可以執(zhí)行其他類似SQL語句。

      1.4 附加命令式注入

      若手動提交http://www.xxx.com/readnews.aspx? id=668 and(select count(*)from admintable)>=0,如果仍然正常顯示原來頁面,則說明數(shù)據(jù)庫中存在admintable表,繼續(xù)修改count(*)部分內(nèi)容,可以進一步判斷數(shù)據(jù)表中的字段情況。

      最后面的單引號同樣被屏蔽,select語句執(zhí)行后,insert語句就直接新增了一個管理員用戶,那么后果可想而知了。實施SQL注入的方法還有很多,它們都是利用了開發(fā)者沒有對用戶輸入內(nèi)容進行嚴格過濾和限制這一共同特征。

      2 防范對策

      SQL注入漏洞與網(wǎng)站開發(fā)人員的開發(fā)習(xí)慣和安全意識有著十分密切的關(guān)系,SQL注入漏洞的本質(zhì)是程序員對用戶輸入的內(nèi)容驗證不足而導(dǎo)致的,要解決此漏洞問題,還得圍繞驗證用戶輸入和提交的內(nèi)容,從幾個方面綜合考慮,統(tǒng)籌應(yīng)對。下文案例代碼以ASP.NET為例。

      2.1 嚴格過濾

      強化對用戶輸入內(nèi)容的驗證,過濾非法字符,是防范SQL注入的主要工作。國內(nèi)外研究的主要措施是編碼或過濾,一般建議在安全問題上遵循最小化原則,直接進行過濾,可將敏感字符集保存在web.config網(wǎng)站配置文件中,具體如下:

      獲取用戶提交的數(shù)據(jù)后使用循環(huán)語句逐個與特殊符號進行比對,如果發(fā)現(xiàn)則進行replace()處理,當(dāng)然也可以替換為相關(guān)轉(zhuǎn)義字符。因web.config配置文件遵循xml編碼格式,其本質(zhì)就是txt文件,在網(wǎng)站發(fā)布后仍然可以方便地修改,便于后期及時更新維護。

      圖1 部分特殊符號說明表

      圖1僅列出了部分危險系數(shù)比較高的特殊符號,實際上還有更多需要注意的符號。在項目開發(fā)中,開發(fā)人員可以編寫專門的工具類(如Tools類),使用正則表達式設(shè)計一些專門匹配方法,如匹配手機號碼,匹配數(shù)值范圍內(nèi)的數(shù)字,匹配長度范圍內(nèi)的字母和數(shù)字等。只要平時注意收集與整理,可在不同項目中重復(fù)使用,提高開發(fā)效率。

      2.2 參數(shù)化查詢

      要防范SQL注入攻擊,首先必須對用戶提交的數(shù)據(jù)進行過濾,該步驟一般能過濾掉大部分攻擊,但由于字符集的覆蓋性關(guān)系,所以也不是萬能的;其次是要改變傳統(tǒng)拼接SQL的寫法,使用參數(shù)化查詢,我們還以經(jīng)典的登錄案例進行說明,具體如下:

      上述是SQL拼接寫法,也是SQL注入攻擊的重要目標,具體攻擊方法上文已作討論,而參數(shù)化查詢被視為防范注入攻擊的有效手段,寫法如下:

      上述寫法之所以能有效屏蔽攻擊,是因為在使用參數(shù)化查詢的情況下,數(shù)據(jù)庫服務(wù)器不會將參數(shù)的內(nèi)容視為SQL指令的一部分來處理,而是在數(shù)據(jù)庫完成SQL指令的編譯后,才套用參數(shù)運行,因此就算參數(shù)中含有指令,也不會被數(shù)據(jù)庫運行。

      此外,有人誤以為存儲過程也是防范SQL注入的重要手段,可是需要特別聲明的是,存儲過程本身并不能防范SQL注入,即如果存儲過程使用動態(tài)SQL語句,它也有可能被SQL注入[4]。因此,存儲過程中的寫法也必須是參數(shù)化的,不能出現(xiàn)字符串拼接。

      2.3 二次驗證

      動態(tài)網(wǎng)頁都離不開客戶端與服務(wù)器端的數(shù)據(jù)交互,實現(xiàn)這種正向交互一般是使用表單。為了提高提交的安全性與成功率,開發(fā)者往往都很重視在前臺使用JavaScript進行數(shù)據(jù)合法性的驗證,即通過驗證后方可提交,否則不允許提交。正因為這樣,往往導(dǎo)致一些開發(fā)者忽略了后臺的再次驗證,因為正常的訪問者與攻擊者的訪問方式可能存在如下差別,如圖2所示。

      圖2 不同用戶表單提交驗證流程圖

      正常用戶在通過客戶端的JS驗證后完成表單提交,否則提示錯誤,不能提交;而攻擊者可以利用技術(shù)手段自行模擬提交,如果沒有后臺的二次驗證,將直接接觸到數(shù)據(jù)庫,這是非常危險的。因此,當(dāng)數(shù)據(jù)通過嚴格的前臺驗證后,必須在后臺進行二次驗證,過濾后方可寫入數(shù)據(jù)庫,切勿完全相信前臺獲取過來的數(shù)據(jù)。

      2.4 出錯控制

      常規(guī)注入方式是攻擊者故意摻入惡意字符或構(gòu)造出畸形的SQL語句,造成數(shù)據(jù)提交后系統(tǒng)報錯,然后從這些錯誤信息中獲取攻擊者想要得知的信息。而程序開發(fā)百密一疏,難免在運行中有意外情況發(fā)生,所以如何有效屏蔽出錯信息也是防范SQL注入的重要內(nèi)容。首先,在程序編碼過程中,針對一些如查詢搜索、數(shù)據(jù)提交等重要節(jié)點,除了進行合法性過濾外,還要善于使用異常處理語句;其次,ASP.NET的web.config網(wǎng)站配置文件還自帶了針對全站的出錯控制方法,代碼如下:

      通過此功能,可以詳細定義不同出錯方式跳轉(zhuǎn)至不同的自定義頁面,defaultRedirect屬性指向出錯轉(zhuǎn)向頁面,mode屬性有三個值,分別是On、Off和RemoteOnly。顧名思議,On是打開,即如果出錯顯示報錯頁面;Off是關(guān)閉,即如果出錯顯示詳細信息;RemoteOnly是遠程打開,本地關(guān)閉,即如果出錯遠程訪問者顯示報錯頁面,本地用戶顯示詳細信息,以方便調(diào)試。Error節(jié)點是自定義具體錯誤類型的跳轉(zhuǎn)頁面,但是建議網(wǎng)站開發(fā)者在發(fā)布時進行籠統(tǒng)處理,因為把錯誤類型定義得太細,雖然對開發(fā)調(diào)試有幫助,但是發(fā)布后,對攻擊者可能更有幫助。

      2.5 特殊保護

      通常Web系統(tǒng)注冊用戶只能訪問前臺,管理后臺是不對外開放的,而SQL注入攻擊的最終目的多是尋找管理員登錄頁面實施攻擊,因此管理員登錄等重要頁面是重點保護對象。具體保護方法可以借鑒防火墻思路,對訪問這些特殊頁面的IP地址進行匹配過濾,如果匹配通過即可訪問,否則直接跳轉(zhuǎn)至報錯頁面或首頁,代碼具體如下:

      上述代碼首先讀取網(wǎng)站配置文件,列出允許的IP地址白名單列表,然后通過自定義類的get_ip()方法獲取訪問者的IP,與之進行匹配,如果訪問者的IP包含在允許列表內(nèi)則可以訪問,否則直接跳轉(zhuǎn)至事先定義的頁面,達到過濾保護的目的。如果是擁有固定IP的單位只需要授權(quán)一個IP即可,如果是自動獲取IP的單位則需要授權(quán)多個IP和修改匹配段,但不管是哪種方式,如此過濾還是比開放式訪問安全得多。

      2.6 自我檢測

      軟件開發(fā)難免存在某些BUG,網(wǎng)站開發(fā)也是如此。根據(jù)知己知彼、百戰(zhàn)不殆的理念,建議開發(fā)者在網(wǎng)站開發(fā)完成后,選取2~3款SQL注入漏洞檢測工具進行自我檢測,如發(fā)現(xiàn)問題,及時進行修正。網(wǎng)絡(luò)上SQL注入漏洞檢測工具有很多,如:SSQLInjection、BSQL Hacker、The Mole和Pangolin等,具體可根據(jù)相關(guān)介紹自行選擇。

      3 結(jié)束語

      因SQL注入漏洞的危害性非常大,所以它也是網(wǎng)絡(luò)攻擊者的重要攻擊方式之一。在了解SQL注入漏洞的成因和基本類型后,開發(fā)者應(yīng)注意養(yǎng)成良好的開發(fā)習(xí)慣加以防范。此外,根據(jù)開發(fā)技術(shù)和開發(fā)模型的更新,也可能出現(xiàn)一些新的注入形式和防范方式,需要我們不斷加強學(xué)習(xí)和研究,共同致力于營造更加安全的網(wǎng)絡(luò)環(huán)境。

      [1]國家計算機網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心.2015年中國互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報告[R].北京:國家互聯(lián)網(wǎng)應(yīng)急中心,2015.

      [2]吳世忠,郭濤,董國偉,等.軟件漏洞分析技術(shù)進展[J].清華大學(xué)學(xué)報:自然科學(xué)版,2012(10).

      [3]隋亮.基于滲透測試的SQL注入漏洞檢測與防范[D].上海:東華大學(xué),2014(5):20.

      [4]王云,郭外萍,陳承歡.WEB項目中的SQL注入問題研究與防范方法[J].計算機工程與設(shè)計,2010(5).

      Vulnerability and Prevention of SQL Injection in Website from the Perspective of Developer

      QIU Shan-liang
      (Yangzhou Commerce Higher Vocational School,Jiangsu Yangzhou 225000,China)

      By analyzing the causes and common types of SQL injection vulnerabilities,this paper puts forward six precautions at the level of code writing to help developers avoid safe vulnerabilities and work duplications so as to improve the security of website operation.

      SQL injection;Vulnerability;Attack

      TP393.08

      A

      1673-2022(2016)04-0052-04

      2016-10-06

      仇善梁(1983-),男,江蘇射陽人,講師,碩士,主要研究方向為教育信息化和WEB應(yīng)用開發(fā)。

      猜你喜歡
      開發(fā)者攻擊者漏洞
      漏洞
      基于微分博弈的追逃問題最優(yōu)策略設(shè)計
      正面迎接批判
      愛你(2018年16期)2018-06-21 03:28:44
      三明:“兩票制”堵住加價漏洞
      漏洞在哪兒
      兒童時代(2016年6期)2016-09-14 04:54:43
      16%游戲開發(fā)者看好VR
      CHIP新電腦(2016年3期)2016-03-10 13:06:42
      高鐵急救應(yīng)補齊三漏洞
      有限次重復(fù)博弈下的網(wǎng)絡(luò)攻擊行為研究
      iOS開發(fā)者調(diào)查
      電腦迷(2015年8期)2015-05-30 12:27:10
      iOS開發(fā)者調(diào)查
      電腦迷(2015年4期)2015-05-30 05:24:09
      桦川县| 保靖县| 沙洋县| 金沙县| 霍林郭勒市| 电白县| 四会市| 荔浦县| 抚州市| 云阳县| 大洼县| 广南县| 两当县| 马山县| 德州市| 沿河| 禹城市| 郎溪县| 沙坪坝区| 博野县| 阳东县| 吴旗县| 博野县| 闸北区| 两当县| 钦州市| 乌苏市| 石家庄市| 永定县| 内江市| 米泉市| 大洼县| 九寨沟县| 寿阳县| 怀宁县| 西宁市| 塔河县| 兖州市| 民勤县| 汶川县| 佛冈县|