• 
    

    
    

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

      ?

      SQL注入攻擊及其檢測(cè)防御技術(shù)研究

      2017-05-08 14:58:36方自遠(yuǎn)

      方自遠(yuǎn)

      摘要:本文對(duì)SQL注入攻擊的原理和方法進(jìn)行了介紹,對(duì)如何檢測(cè)和防御SQL注入攻擊進(jìn)行了研究。網(wǎng)絡(luò)系統(tǒng)安全問(wèn)題是一個(gè)持續(xù)性問(wèn)題,SQL注入攻擊作為網(wǎng)絡(luò)中最為常見(jiàn)的攻擊手段。了解并掌握如何有效防御SQL注入攻擊對(duì)提升Web網(wǎng)絡(luò)系統(tǒng)的安全性有著重大的現(xiàn)實(shí)指導(dǎo)意義。

      關(guān)鍵詞: Web安全; SQL注入; 漏洞檢測(cè); 攻擊防御

      中圖分類號(hào): TP391

      文獻(xiàn)標(biāo)志碼:A

      文章編號(hào): 2095-2163(2016)06-0087-03

      0引言

      最近十年來(lái),互聯(lián)網(wǎng)產(chǎn)業(yè)和技術(shù)發(fā)展蓬勃迅速,社會(huì)的各個(gè)領(lǐng)域都已經(jīng)與Web應(yīng)用建立了密切聯(lián)系。使用互聯(lián)網(wǎng)已經(jīng)成為現(xiàn)代生活方式的不二選擇。在全世界,大致可知應(yīng)有數(shù)以億計(jì)的網(wǎng)絡(luò)服務(wù)器都在提供互聯(lián)網(wǎng)服務(wù)。但與此同時(shí),這些網(wǎng)絡(luò)服務(wù)器也無(wú)時(shí)無(wú)刻都會(huì)遭遇到各類惡意攻擊。

      數(shù)據(jù)庫(kù)是Web應(yīng)用系統(tǒng)的基礎(chǔ)組成部分,存儲(chǔ)著大量關(guān)鍵敏感信息,因此,侵入和攻擊數(shù)據(jù)庫(kù),竊取數(shù)據(jù)信息是網(wǎng)絡(luò)攻擊的主要目的和實(shí)施手段。根據(jù)相關(guān)組織調(diào)研數(shù)據(jù)顯示,Web應(yīng)用十大關(guān)鍵風(fēng)險(xiǎn)排名第一位就是注入攻擊。在全世界發(fā)生的Web服務(wù)系統(tǒng)攻擊實(shí)踐中,大約有60%的行為均可標(biāo)注為SQL注入攻擊。因此,研究SQL注入攻擊及檢測(cè)防御技術(shù)對(duì)有效控制和降低網(wǎng)絡(luò)攻擊事件發(fā)生必將具有重大現(xiàn)實(shí)意義及作用。

      [BT4]1SQL注入攻擊研究

      [BT5]1.1SQL注入攻擊原理

      SQL注入攻擊(SQL injection)是利用Web 應(yīng)用程序的設(shè)計(jì)漏洞來(lái)實(shí)現(xiàn)Web應(yīng)用系統(tǒng)、尤其是數(shù)據(jù)庫(kù)的入侵,從而最終達(dá)到獲取或破壞數(shù)據(jù)的一種非法策略及手段。通過(guò)SQL注入可能會(huì)導(dǎo)致如下后果:入侵者惡意進(jìn)占了數(shù)據(jù)庫(kù)服務(wù)器、獲取數(shù)據(jù)庫(kù)高級(jí)操作權(quán)限、竊取數(shù)據(jù)庫(kù)中存儲(chǔ)的關(guān)鍵數(shù)據(jù)信息等。

      SQL注入攻擊的發(fā)起者多是利用Web頁(yè)面中存在的漏洞,有針對(duì)性地構(gòu)造SQL語(yǔ)句,并蓄意引導(dǎo)數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行這些SQL語(yǔ)句,通過(guò)截取用戶名和密碼等重要信息,從而全面獲取了數(shù)據(jù)庫(kù)控制權(quán)限。

      SQL注入攻擊的可選研究方式主要有:

      1)使用注釋符和恒等式;

      2)使用union語(yǔ)句進(jìn)行聯(lián)合查詢;

      3)使用insert或update語(yǔ)句對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)表內(nèi)數(shù)據(jù)進(jìn)行增加或修改;

      4)利用一些內(nèi)置函數(shù)輔助進(jìn)行攻擊等。

      在此,將結(jié)合前2種方法給出實(shí)現(xiàn)過(guò)程詳述與闡析。

      1.1.1使用注釋符和恒等式

      眾所周知,如果要查詢數(shù)據(jù)庫(kù)的user表中所有條目,那么正確的查詢語(yǔ)句為:

      SELECT * FROM user WHERE username = 'user' AND password = 'pawd'

      利用ASP 實(shí)現(xiàn)時(shí),需要連接字符串,而后再加上SQL 命令,最后執(zhí)行查看返回的結(jié)果是否為空。那么SQL 語(yǔ)句嵌套在ASP 代碼中的表現(xiàn)形式可描述如下:

      var sql = "SELECT * FROM user WHERE username = '" +loginname + "' AND密碼 = '" +loginpwd + "'";(loginname字段與loginpwd字段分別存儲(chǔ)了用戶在網(wǎng)頁(yè)上所填入的用戶名和密碼信息。)

      但是當(dāng)用戶在Web頁(yè)面文本框內(nèi)輸入的內(nèi)容為:loginname=‘ or 1=1 -- ,而loginpwd 的內(nèi)容任意輸入時(shí),此時(shí)在ASP 中的查詢語(yǔ)句則演變成:

      SELECT * FROM user WHERE username=‘or 1=1 --AND password = 'pawd '

      顯然,SQL語(yǔ)句中密碼驗(yàn)證部分被“- -”注釋符當(dāng)成了注釋語(yǔ)句,同時(shí),由于“1=1”恒等式的存在導(dǎo)致用戶名驗(yàn)證部分永遠(yuǎn)為真。用戶名驗(yàn)證和密碼驗(yàn)證均發(fā)生了失效,這樣攻擊者就可以登錄進(jìn)入Web應(yīng)用系統(tǒng)了。

      1.1.2使用union語(yǔ)句進(jìn)行聯(lián)合查詢

      利用union關(guān)鍵字查詢一些數(shù)據(jù)庫(kù)用戶信息、數(shù)據(jù)庫(kù)版本等信息。還可以用union關(guān)鍵字來(lái)獲取其他信息。通過(guò)頁(yè)面錯(cuò)誤信息提示得到當(dāng)前數(shù)據(jù)庫(kù)名稱、用戶名等關(guān)鍵信息。而且,還可通過(guò)多次的報(bào)錯(cuò)測(cè)試,逐步獲得多種關(guān)鍵數(shù)據(jù)信息,從而掌握數(shù)據(jù)庫(kù)內(nèi)部結(jié)構(gòu)、數(shù)據(jù)庫(kù)用戶名等信息,為侵入數(shù)據(jù)提供實(shí)現(xiàn)基礎(chǔ)。

      [BT5]1.2SQL注入攻擊流程

      SQL注入攻擊的基礎(chǔ)流程可概述為:首先,檢測(cè)Web登錄頁(yè)面中是否有SQL注入漏洞,從而構(gòu)建SQL注入點(diǎn);其次,利用已經(jīng)構(gòu)建的SQL注入點(diǎn)將本該基于頁(yè)面獲取的驗(yàn)證參數(shù)通過(guò)SQL語(yǔ)句的語(yǔ)法組合傳遞給數(shù)據(jù)庫(kù);然后,經(jīng)過(guò)多次試探,陸續(xù)可得到數(shù)據(jù)庫(kù)類型、數(shù)據(jù)庫(kù)結(jié)構(gòu)、數(shù)據(jù)表信息以及數(shù)據(jù)庫(kù)賬號(hào)等;最后,則根據(jù)已知信息構(gòu)造并執(zhí)行SQL語(yǔ)句,達(dá)到侵入數(shù)據(jù)庫(kù),獲取數(shù)據(jù)或?qū)嵤?shù)據(jù)更改等目的。研究設(shè)計(jì)步驟可展示如下:

      [HT5”H][ST5”HZ]步驟1[HT5”SS][ST5”BZ]判斷SQL注入點(diǎn)。通常使用的SQL注入點(diǎn)判斷方法可分述為如下2種:

      1)把“”添加到Web提交請(qǐng)求的尾部,再根據(jù)Web頁(yè)面反饋的提示信息來(lái)判斷該系統(tǒng)所使用的數(shù)據(jù)庫(kù)類型是否存在SQL注入漏洞。

      但是,程序設(shè)計(jì)者可以進(jìn)一步通過(guò)加入判別規(guī)則而將單引號(hào)進(jìn)行過(guò)濾,那么將使單引號(hào)測(cè)試最終失效,從而無(wú)法判斷是否存在SQL注入點(diǎn)。

      2)將“and 1=1”或“and 1=2”添加到提交請(qǐng)求的末尾,若添加“and 1=1”的提交請(qǐng)求可以正常返回顯示信息、而添加“and 1=2”的提交請(qǐng)求卻返回出錯(cuò)提示,此時(shí)則說(shuō)明該Web頁(yè)面存在注入漏洞;如果上述2個(gè)判別式均可返回提示信息,如此該Web頁(yè)面即是安全的,也就是不存在SQL注入漏洞。

      [HT5”H][ST5”HZ]步驟2[HT5”SS][ST5”BZ]猜測(cè)表名和字段名。如果訪問(wèn)的Web頁(yè)面存在注入漏洞,則可以在提交請(qǐng)求語(yǔ)句后加入“and exists (select count(*)from student”,如果頁(yè)面執(zhí)行正常,沒(méi)有錯(cuò)誤提示,則說(shuō)明student表是存在的,否則student表不存在,可以更換名稱繼續(xù)測(cè)試,直到猜出表名為止。

      如果將Count(*)替換為Count(字段名),則用同樣的方法即可進(jìn)行字段名的探測(cè)。

      [HT5”H][ST5”HZ]步驟3[HT5”SS][ST5”BZ]進(jìn)行注入攻擊。當(dāng)已經(jīng)基本了解數(shù)據(jù)庫(kù)的內(nèi)部結(jié)構(gòu)后,黑客即可侵入后臺(tái)數(shù)據(jù)庫(kù)了。那么,這些黑客所需要的并不是DBA(數(shù)據(jù)庫(kù)管理員)賬號(hào),而是DBA權(quán)限。當(dāng)掌控了DBA權(quán)限后,據(jù)此將可獲得更高級(jí)別的權(quán)限,這樣便可以在Web系統(tǒng)中留下后門、植入木馬等。如果使用sa 連接數(shù)據(jù)庫(kù),則能夠調(diào)用xp_cmdshell 等存儲(chǔ)過(guò)程,此時(shí)就可以對(duì)應(yīng)用系統(tǒng)、數(shù)據(jù)庫(kù)乃至操作系統(tǒng)進(jìn)行修改和控制了。

      [BT4]2SQL注入攻擊檢測(cè)技術(shù)

      根據(jù)檢測(cè)發(fā)生的時(shí)間和目的差異,SQL注入攻擊檢測(cè)可以分成為入侵前檢測(cè)和入侵后檢測(cè)。具體來(lái)說(shuō),利用漏洞掃描工具和構(gòu)造SQL注入語(yǔ)句檢測(cè)即是入侵前檢測(cè)的主要手段,而入侵后檢測(cè)的方法則是檢查服務(wù)器日志文件。通常情況下,入侵者在發(fā)動(dòng)SQL注入攻擊后,Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器的日志文件都會(huì)存有相應(yīng)的登錄和操作記錄?;诖?,研究探討可知,通過(guò)使用如下方法即能改善與增進(jìn)SQL注入漏洞檢測(cè),分析闡釋如下。

      1)利用漏洞掃描工具。常用的漏洞掃描工具有:HDSI、NBSI、Domain、Sqlmap、BSQL Hacker、The Mole、Pangolin(穿山甲)。需要指出的是,這些工具既是網(wǎng)站維護(hù)者可以善加利用的一些檢測(cè)工具,同時(shí)卻也是網(wǎng)絡(luò)攻擊者用來(lái)攻擊Web服務(wù)器的首選工具。

      2)通過(guò)SQL注入點(diǎn),執(zhí)行非法SQL語(yǔ)句。將SQL語(yǔ)句的永真式或永假式追加在Web頁(yè)面請(qǐng)求后,根據(jù)頁(yè)面執(zhí)行后得到反饋信息來(lái)判斷是否存在SQL注入點(diǎn)。對(duì)已發(fā)現(xiàn)的SQL注入點(diǎn),通過(guò)構(gòu)造and exits(select……)語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)結(jié)構(gòu)判斷。

      3)日志文件檢查。一般情況下,Web應(yīng)用系統(tǒng)遭到入侵后都會(huì)留下相關(guān)操作記錄在日志文件中。通過(guò)讀取并分析數(shù)據(jù)庫(kù)和Web服務(wù)器的日志文件來(lái)判斷系統(tǒng)是否發(fā)生了入侵則是一種行之有效的方法。只是,對(duì)于經(jīng)驗(yàn)老到的黑客來(lái)說(shuō),在實(shí)施入侵后則會(huì)進(jìn)行殘留痕跡的清理。

      4)對(duì)訪問(wèn)請(qǐng)求進(jìn)行檢測(cè)。正常的訪問(wèn)請(qǐng)求不應(yīng)該包含SQL關(guān)鍵字?;谶@一前提,如果在HTTP請(qǐng)求中含有SQL關(guān)鍵詞、特殊字符或者SQL語(yǔ)義的句子,即可初步判定為一次攻擊行為。

      [JP3]使用頻度通常較高的SQL關(guān)鍵字有:select…from、 order by、union、drop table、exp、md5()、case when then、sleep、substring、user()、password()、version()、 substr()、benchmark()、schema()、--等都可以裁斷為SQL注入攻擊行為。 [JP]

      [BT4]3SQL注入攻擊防御技術(shù)

      要做到防御SQL注入攻擊,必須從多個(gè)層面設(shè)計(jì)應(yīng)對(duì)策略:第一,從數(shù)據(jù)庫(kù)設(shè)計(jì)和數(shù)據(jù)庫(kù)管理方面;第二,從Web系統(tǒng)開(kāi)發(fā)設(shè)計(jì)方面;第三,從Web系統(tǒng)管理維護(hù)方面?,F(xiàn)給出綜合論述如下。

      [BT5]3.1數(shù)據(jù)庫(kù)管理防御措施

      使用安全的數(shù)據(jù)庫(kù)賬號(hào),嚴(yán)格管控?cái)?shù)據(jù)庫(kù)賬號(hào)權(quán)限,謹(jǐn)慎分配sa權(quán)限,用于程序連接數(shù)據(jù)庫(kù)的用戶使用數(shù)據(jù)庫(kù)用戶角色組的成員,同時(shí)嚴(yán)禁使用服務(wù)器角色組成員。

      在數(shù)據(jù)庫(kù)服務(wù)器上刪除多余的擴(kuò)展存儲(chǔ)過(guò)程,尤其是訪問(wèn)注冊(cè)表的存儲(chǔ)過(guò)程。

      DBA要將數(shù)據(jù)庫(kù)服務(wù)器上的示例腳本最大限度移除,有效減少冗余腳本數(shù)據(jù)量。

      數(shù)據(jù)庫(kù)應(yīng)設(shè)置高強(qiáng)度密碼,提升密碼安全性。

      [BT5]3.2Web系統(tǒng)設(shè)計(jì)防御技術(shù)

      探尋目前安全問(wèn)題的現(xiàn)象機(jī)理可知,Web系統(tǒng)開(kāi)發(fā)人員應(yīng)建立全局性的安全意識(shí),在設(shè)計(jì)過(guò)程中充分考慮可能出現(xiàn)的安全漏洞,編寫(xiě)安全代碼,防患于未然。

      在此基礎(chǔ)上,Web程序設(shè)計(jì)者則應(yīng)保證后臺(tái)研發(fā)程序能夠具備對(duì)用戶提交的訪問(wèn)請(qǐng)求參數(shù)、pose數(shù)據(jù)、查詢關(guān)鍵字進(jìn)行嚴(yán)格檢測(cè)和限制的功能;異常錯(cuò)誤界面可以跳轉(zhuǎn)指定界面,在設(shè)計(jì)上保證不會(huì)將錯(cuò)誤信息暴露給Web系統(tǒng)使用者;而當(dāng)涉及到數(shù)據(jù)庫(kù)訪問(wèn)時(shí),應(yīng)采用加密傳輸,保證絕不使用明文傳遞參數(shù);另外,針對(duì)SQL注入攻擊常用方式,應(yīng)嘗試設(shè)立SQL語(yǔ)句的關(guān)聯(lián)構(gòu)建規(guī)則。

      [BT5]3.3系統(tǒng)管理維護(hù)防御措施

      系統(tǒng)管理員應(yīng)及時(shí)更新可為Web系統(tǒng)運(yùn)行提供基礎(chǔ)支持的關(guān)鍵軟件,確保攻擊者無(wú)法通過(guò)操作系統(tǒng)漏洞進(jìn)行入侵。此外,應(yīng)關(guān)閉相關(guān)對(duì)外連接端口,如TCP 1433/UDP 1434。系統(tǒng)管理員還應(yīng)定期檢查系統(tǒng)中用戶密碼,提升密碼強(qiáng)度,建立密碼定期更換的長(zhǎng)效機(jī)制。同時(shí),Web系統(tǒng)管員也要定期對(duì)Web系統(tǒng)日志引入安全審核,檢查是否存在異常訪問(wèn)記錄,確保能夠及時(shí)發(fā)現(xiàn)系統(tǒng)安全隱患。

      [BT4]4結(jié)束語(yǔ)

      作者在本文中介紹了SQL注入攻擊的原理和方法、如何檢測(cè)SQL注入漏洞、怎樣防御SQL注入攻擊方面的內(nèi)容。通過(guò)本文,讀者對(duì)SQL注入建立了一個(gè)全面清晰的認(rèn)識(shí),對(duì)如何檢測(cè)和防御SQL注入攻擊也獲得了基本了解,并掌握了一定的基礎(chǔ)方法及有效防范手段。

      當(dāng)前的時(shí)代是一個(gè)互聯(lián)網(wǎng)時(shí)代。網(wǎng)絡(luò)安全問(wèn)題既是互聯(lián)網(wǎng)安全問(wèn)題,也是社會(huì)安全問(wèn)題。作為網(wǎng)絡(luò)中最為常見(jiàn)的攻擊手段,SQL注入攻擊給互聯(lián)網(wǎng)造成了巨大的破壞,也帶來(lái)了難以估量的經(jīng)濟(jì)損失。因而研究實(shí)現(xiàn)有效防御SQL注入攻擊,對(duì)于提升Web網(wǎng)絡(luò)系統(tǒng)的安全性無(wú)論從經(jīng)濟(jì)、社會(huì)、倫理方面都將具有重要意義。

      參考文獻(xiàn):

      楊章瓊,陳效軍,王濤. SQL注入攻擊淺析[J]. 計(jì)算機(jī)光盤軟件與應(yīng)用, 2012(16):103-104.

      [2] 楊豐嘉. 淺談網(wǎng)站SQL注入攻擊防護(hù)[J]. 計(jì)算機(jī)光盤軟件與應(yīng)用, 2013(13):144.

      [3] 劉秀梅,辛陽(yáng),徐勤. SQL注入攻擊及防御方法研究[EB/OL]. [2016-09-21].http://www.paper.edu.cn/releasepaper/content/201609-190.

      [4] 龐博,高杰. 基于ASP.NET的SQL注入攻擊與防范[J]. 輕工科技,2009,25(9):86-87.

      [5] 齊林,王靜云,蔡凌云,等. SQL注入攻擊檢測(cè)與防御研究[J]. 河北科技大學(xué)學(xué)報(bào), 2012,33(6):530-533.

      [6] 鄭斌. 黑客攻防入門與進(jìn)階[M]. 北京:清華大學(xué)出版社,2010.[ZK)]

      [FL)]

      [CDF61]

      [HT5”SS][ST5”BZ][WT5”BZ](上接第86頁(yè))

      [FL(2K2]

      [HT5”SS]

      FETCH ABSOLUTE 3 FROM cur_xg--返回第3行并將其變?yōu)楫?dāng)前行

      UPDATE xsxx SET rxnf=2012--更新當(dāng)前行的列值

      WHERE CURRENT OF cur_xg--當(dāng)前游標(biāo)指針?biāo)傅漠?dāng)前行數(shù)據(jù)

      CLOSE cur_xg

      DEALLOCATE cur_xg

      這里需要注意的是,游標(biāo)的第二種應(yīng)用是一種不規(guī)范的更新數(shù)據(jù)的途徑,很容易造成數(shù)據(jù)的不一致,因此通常狀況下并不選用游標(biāo)來(lái)設(shè)計(jì)更新數(shù)據(jù)表中的數(shù)據(jù)。

      另外,還需提及的就是,本文實(shí)例所用的數(shù)據(jù)表均基于xxsf(學(xué)校收費(fèi)數(shù)據(jù)庫(kù))中的2個(gè)表,分別是:

      xsxx(rxnf,xh,xm,xb,ksh,sfz,zydm,zsid)

      zysf(zydm,zymc,lsyx,pycc,xxnx,xfbz,jcfbz)

      [BT4]5結(jié)束語(yǔ)

      SQL Server中的游標(biāo)在原理上具有C語(yǔ)言指針一樣的語(yǔ)言結(jié)構(gòu),相應(yīng)地則設(shè)計(jì)提供了一種在服務(wù)器內(nèi)部處理結(jié)果集的方法。使用游標(biāo)可以通過(guò)遍歷操作逐一地從結(jié)果集中實(shí)現(xiàn)數(shù)據(jù)讀取,也可以對(duì)結(jié)果集中某些數(shù)據(jù)重點(diǎn)加設(shè)更新或刪除的操作。本文以學(xué)校收費(fèi)數(shù)據(jù)庫(kù)為背景并結(jié)合具體的實(shí)例來(lái)闡述游標(biāo)的使用,游標(biāo)可以面向結(jié)果集中的每一行進(jìn)行相同或不同的操作,這不僅提升了SQL語(yǔ)句處理復(fù)雜查詢的能力,而且還降低了系統(tǒng)開(kāi)銷和潛在的阻隔情況,在一定程度上解決了許多應(yīng)用程序不能把整個(gè)結(jié)果集作為一個(gè)單元來(lái)處理的問(wèn)題。

      [HS1*2][HT5H]參考文獻(xiàn):[HT]

      [WTBZ][ST6BZ][HT6SS][1] [ZK(#〗

      [HJ*2]

      趙慧玲,毛應(yīng)爽,孟憲穎. 基于SQL游標(biāo)的研究與應(yīng)用[J]. 科技創(chuàng)新導(dǎo)報(bào),2012(28):31-32.

      [2] 劉志成,寧云智,劉釗,編著. SQL Server實(shí)例教程[M]. 北京:電子工業(yè)出版社,2013.

      [3] 薛麗香,汪東芳. 淺談SQL Server數(shù)據(jù)庫(kù)中游標(biāo)的使用[J]. 福建電腦,2016(6):157-158.

      [4] 陳芳勤. SQL Server 2000中游標(biāo)的應(yīng)用[J]. 中國(guó)科技信息,2008(13):96,99.

      [5] 黃龍軍. 游標(biāo)在Online Judge中的應(yīng)用[J]. 紹興文理學(xué)院學(xué)報(bào)(自然科學(xué)),2012,32(8):26-29.[ZK)]

      [FL)]

      九台市| 高平市| 平乐县| 淳安县| 清徐县| 溆浦县| 故城县| 定结县| 高阳县| 南宫市| 湖州市| 延津县| 霸州市| 巩义市| 象州县| 邻水| 逊克县| 密山市| 浮山县| 本溪市| 信宜市| 博客| 和平县| 抚顺县| 苏州市| 广汉市| 沾益县| 丽水市| 鹿邑县| 行唐县| 阳谷县| 绥棱县| 阿克苏市| 烟台市| 宁化县| 成都市| 丰顺县| 永康市| 东山县| 阳朔县| 尼玛县|