版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
論文編碼:WZ201511隨著計算機網(wǎng)絡(luò)的發(fā)展,Web應(yīng)用程序得到極為廣泛的應(yīng)用,其自身的安全也面臨越來越多的威脅,結(jié)構(gòu)化查詢語言(SQL)注入攻擊也是目前Web應(yīng)用程序面臨的主要安全威脅之一,因此對SQL注入攻擊應(yīng)用現(xiàn)狀與防御對策對于理解和加強Web應(yīng)用程序的安全具有十分重要的意義。SQL注入攻擊是黑客對數(shù)據(jù)庫進行攻擊的常用手段之一。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式編寫應(yīng)用程序的程序員也越來越多。但是由于程序員的水平及經(jīng)驗也參差不齊,相當(dāng)大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQLInjection,即SQL注入。本文所論述的內(nèi)容主要是對于在現(xiàn)存的群體結(jié)構(gòu)中,對于SQL諸如攻擊的應(yīng)用現(xiàn)狀的一些了解,以及對于減小SQL注入攻擊所造成的危害,降低WEB系統(tǒng)的安全威脅的一些防御對策,對于提高web程序質(zhì)量具有重要的意義。關(guān)鍵詞: 注入攻擊應(yīng)用現(xiàn)狀防御對策網(wǎng)絡(luò)管理ABSTRACTTitle:SQLinjectionattackanddefenseWiththedevelopmentofcomputernetworks,webapplicationsextremelywiderangeofapplications,itssecurityisalsofacingincreasingthreatsandStructuredQueryLanguage(SQL)injectionattacksisfacingwebapplicationsecuritythreatsSQLinjectionattackanddefenseisofgreatsignificancefortheunderstandingandenhancethesecurityofwebapplications.SQLinjectionattacksareoneofthecommonmeansofhackerattacksonthedatabase.WiththedevelopmentoftheB/Smodeapplicationdevelopment,moreandmoreprogrammerstowriteapplicationsthatusethismodel.However,duetotheunevenlevelandexperienceoftheprogrammers,alargepartoftheprogrammerwhenwritingcode,notthelegitimacyoftheuserinputdatatojudge,tomaketheapplicationasecurityrisk.Userscansubmitadatabasequerycode,accordingtotheproceduretoreturntheresults,getsomedatahewouldliketoknow,ThisisknownasSQLInjection,namelySQLinjection.ExpoundsthemaincontentofthisarticleisfortheexistingpopulationstructureofSQL,suchasthepresentsituationoftheapplicationofattackforsomeoftheunderstanding,aswellasreduceSQLinjectionattackscausedharm,somepreventionmeasurestoreduceWEBsystemsecuritythreat,hasthevitalsignificancetoimprovethequalityofWEBapplication.Keywords:Injectionattacks,Applicationstatus,Defensecountermeasure,NetworkmanagementTOC\o"1-5"\h\z\o"CurrentDocument"一、 網(wǎng)絡(luò)攻擊 2\o"CurrentDocument"(一) 網(wǎng)絡(luò)攻擊概念 2\o"CurrentDocument"(二) 網(wǎng)絡(luò)攻擊分類 2\o"CurrentDocument"(三) 網(wǎng)絡(luò)攻擊步驟 3\o"CurrentDocument"二、 SQL注入攻擊概述 4(一) SQL注入攻擊概念 4\o"CurrentDocument"(二) 攻擊背景 4三、 WebT作原理與SQL數(shù)據(jù)庫 5(一) 理解WEB應(yīng)用的工作原理 5(二) WEB系統(tǒng)通信方式 6(三) SQL數(shù)據(jù)庫查詢語言 7四、SQL注入攻擊測試 錯誤!未定義書簽。(一) SQL注入攻擊的基本概念 錯誤!未定義書簽。(二) SQL注入產(chǎn)生原因 錯誤!未定義書簽。(三) 不安全的數(shù)據(jù)庫配置 錯誤!未定義書簽。五、SQL注入的實現(xiàn) 錯誤!未定義書簽。(一) SQL注入流程 錯誤!未定義書簽。(二) 尋找SQL注入 錯誤!未定義書簽。iii(三)確認(rèn)SQ匚注入及SQL語句構(gòu)造方式....錯誤!未定義書簽。TOC\o"1-5"\h\z\o"CurrentDocument"六、 SQL注入攻擊防御 9(一) 代碼層防御 9(二) 規(guī)范化 10\o"CurrentDocument"(三) 通過設(shè)計來避免SQL注入 10\o"CurrentDocument"(四) 確保數(shù)據(jù)庫安全 10\o"CurrentDocument"七、 SQL注入攻擊犯罪的應(yīng)對 12\o"CurrentDocument"(一) SQL注入攻擊犯罪概述 12\o"CurrentDocument"(二) SQL注入攻擊犯罪的預(yù)防 12\o"CurrentDocument"(三) SQL注入攻擊犯罪的應(yīng)對方法 12結(jié)語 13\o"CurrentDocument"參考文獻 14致謝 14-XX.刖言隨著當(dāng)今世界網(wǎng)絡(luò)技術(shù)與信息技術(shù)高速發(fā)展,Web應(yīng)用程序具有界面統(tǒng)一,使用簡單,易于維護,擴展性好,共享度高等優(yōu)先°Web應(yīng)用程序已經(jīng)被應(yīng)用到生活中的各個角落。但Web應(yīng)用建立在廣域網(wǎng)上,對安全的控制能力較弱。且開發(fā)人員的水平和經(jīng)驗參差不齊,相當(dāng)一部分的程序員在編寫代碼時沒有對用戶的輸入數(shù)據(jù)或者頁面中所攜帶的信息進行必要的合法性判斷。攻擊者利用這個機會提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,就可以獲得一些數(shù)據(jù)庫信息?,F(xiàn)在通用的數(shù)據(jù)庫管理系統(tǒng)都有一些工具和功能組件,可以直接與操作系統(tǒng)及網(wǎng)絡(luò)進行連接這無疑給我們提供了很多便利。但是當(dāng)攻擊者通過SQL注入攻擊一個數(shù)據(jù)庫系統(tǒng),去危害就不只局限于存儲在數(shù)據(jù)庫中數(shù)據(jù),攻擊者還可以設(shè)法獲得對DBMS所有的主機進行交互式訪問,使其危害從數(shù)據(jù)庫向操作系統(tǒng)、甚至整個網(wǎng)絡(luò)蔓延。因此,我不僅應(yīng)當(dāng)將SQL注入攻擊看作是一個對存儲在數(shù)據(jù)庫上數(shù)據(jù)的威脅,而應(yīng)當(dāng)看作是對整個網(wǎng)絡(luò)的威脅?;赟QL注入攻擊的應(yīng)用現(xiàn)狀存在的一些漏洞進行簡單分析,同時將提出一些防御對策,以便web應(yīng)用程序在使用簡單,易于維護的同時,提高其安全性與可擴張性。一、網(wǎng)絡(luò)攻擊技術(shù)(一) 網(wǎng)絡(luò)攻擊概念網(wǎng)絡(luò)攻擊所屬現(xiàn)代詞,指的是利用網(wǎng)絡(luò)存在的漏洞和安全缺陷對網(wǎng)絡(luò)系統(tǒng)的硬件、軟件及其系統(tǒng)中的數(shù)據(jù)進行的攻擊。(二) 網(wǎng)絡(luò)攻擊趨勢1、 自動化程度和攻擊速度提高。隨著分布式攻擊工具的出現(xiàn),攻擊者可以管理和協(xié)調(diào)分布在許多Internet系統(tǒng)上的大量已部署的攻擊工具。目前,分布式攻擊工具能夠更有效地發(fā)動拒絕服務(wù)攻擊,掃描潛在的受害者,危害存在安全隱患的系統(tǒng)。2、 攻擊工具越來越復(fù)雜。攻擊工具越來越普遍地被開發(fā)為可在多種操作系統(tǒng)平臺上執(zhí)行。許多常見攻擊工具使用IRC或HTTP等協(xié)議,從入侵者那里向受攻擊的計算機發(fā)送數(shù)據(jù)或命令,使得人們將攻擊特性與正常、合法的網(wǎng)絡(luò)傳輸流區(qū)別開變得越來越困難。3、 發(fā)現(xiàn)安全漏洞越來越快。4、 越來越高的防火墻滲透率。防火墻是人們用來防范入侵者的主要保護措施。但是越來越多的攻擊技術(shù)可以繞過防火墻,例如,IPP(Internet打印協(xié)議)和WebDAV(基于Web的分布式創(chuàng)作與翻譯)都可以被攻擊者利用來繞過防火墻。5、 越來越不對稱的威脅。由于攻擊技術(shù)的進步,一個攻擊者可以比較容易地利用分布式系統(tǒng),對一個受害者發(fā)動破壞性的攻擊。隨著部署自動化程度和攻擊工具管理技巧的提高,威脅的將繼續(xù)增加。6、 對基礎(chǔ)設(shè)施將形成越來越大的威脅。用戶越來越多地依賴Internet完成日常業(yè)務(wù),基礎(chǔ)設(shè)施攻擊引起人們越來越大的擔(dān)心?;A(chǔ)設(shè)施面臨分布式拒絕服務(wù)攻擊、蠕蟲病毒、對Internet域名系統(tǒng)(DNS)的攻擊和對路由器攻擊或利用路由器的攻擊。(三) 攻擊的位置1、 遠程攻擊:指外部攻擊者通過各種手段,從該子網(wǎng)以外的地方向該子網(wǎng)或者該子網(wǎng)內(nèi)的系統(tǒng)發(fā)動攻擊。2、 本地攻擊:指本單位的內(nèi)部人員,通過所在的局域網(wǎng),向本單位的其他系統(tǒng)發(fā)動攻擊,在本級上進行非法越權(quán)訪問。3、 偽遠程攻擊:指內(nèi)部人員為了掩蓋攻擊者的身份,從本地獲取目標(biāo)的一些必要信息后,攻擊過程從外部遠程發(fā)起,造成外部入侵的現(xiàn)象。(四) 攻擊者常用的攻擊工具1、 DOS攻擊工具:如WinNuke通過發(fā)送OOB漏洞導(dǎo)致系統(tǒng)藍屏;Bonk通過發(fā)送大量偽造的UDP數(shù)據(jù)包導(dǎo)致系統(tǒng)重啟;TearDrop通過發(fā)送重疊的IP碎片導(dǎo)致系統(tǒng)的TCP/IP棧崩潰;WinArp通過發(fā)特別數(shù)據(jù)包在對方機器上產(chǎn)生大量的窗口;Land通過發(fā)送大量偽造源IP的基于SYN的TCP請求導(dǎo)致系統(tǒng)重啟動;FluShot通過發(fā)送特定IP包導(dǎo)致系統(tǒng)凝固。2、 木馬程式:如BO2000(BackOrifice)、“冰河”、NetSpy、Glacier、KeyboardGhost等。(五) 攻擊的層次從淺入深的分為以下幾個層次:1、 簡單拒絕服務(wù)。2、 本地用戶獲得非授權(quán)讀權(quán)限。3、 本地用戶獲得非授權(quán)寫權(quán)限。4、 遠程用戶獲得非授權(quán)賬號信息。5、 遠程用戶獲得特權(quán)文件的讀權(quán)限。6、 遠程用戶獲得特權(quán)文件的寫權(quán)限。7、 遠程用戶擁有了系統(tǒng)管理員權(quán)限。(六) 網(wǎng)絡(luò)攻擊步驟第一步:隱藏自己的位置。第二步:尋找目標(biāo)主機并分析目標(biāo)主機。第三步:獲取帳號和密碼,登錄主機。第四步:獲得控制權(quán)。第五步:竊取網(wǎng)絡(luò)資源和特權(quán)。二、SQL注入攻擊概述(一) $。1注入攻擊概念SQL注入攻擊是黑客對數(shù)據(jù)庫進行攻擊的常用手段之一。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式編寫應(yīng)用程序的程序員也越來越多。但是由于程序員的水平及經(jīng)驗也參差不齊,相當(dāng)大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQLInjection,即SQL注入。(二) 注入簡介SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問防止SQL注入攻擊沒什么區(qū)別,所以市面的防火墻都不會對SQL注入發(fā)出警報,如果管理員沒查看IIS日志的習(xí)慣,可能被入侵很長時間都不會發(fā)覺。但是,SQL注入的手法相當(dāng)靈活,在注入的時候會碰到很多意外的情況,需要構(gòu)造巧妙的SQL語句,從而成功獲取想要的數(shù)據(jù)。(二)攻擊背景在計算機技術(shù)高速發(fā)展的今天,越來越讓人們頭疼的是面臨越來越“變態(tài)”和復(fù)雜的威脅網(wǎng)站技術(shù),他們利用Internet執(zhí)行各種惡意活動,如身份竊取、私密信息竊取、帶寬資源占用等。它們潛入之后,還會擴散并不斷更新自己。這些活動常常利用用戶的好奇心,在用戶不知道或未允許的情況下潛入用戶的PC,不知不覺中,帳戶里的資金就被轉(zhuǎn)移了,公司訊息也被傳送出去,危害十分嚴(yán)重。2006年8月16日,第一個Web威脅樣本出現(xiàn),截止到2006年10月25日,已經(jīng)產(chǎn)生了第150個變種,并且,還在不斷地演化下去。
三、SQL注入的技術(shù)分析本章從SQL注入攻擊與web環(huán)境的環(huán)境依賴關(guān)系,介紹了數(shù)據(jù)庫的基本知識和常見操作SQL數(shù)據(jù)庫的SQL語言,web工作原理。Web程序的通信方式,為理解SQL注入的生成過程提供一些背景知識。從Web應(yīng)用層的代碼介紹引發(fā)SQL注入的因素以及那些開發(fā)實踐和行為會引發(fā)SQL注入,從而達到SQL注入的實現(xiàn)。web工作原理1、什么是Web應(yīng)用WorldWideWeb簡稱為Web。Web是一個由文檔組成的超大規(guī)模集合,其中通過鏈接相互聯(lián)系。這些文檔是由Web服務(wù)器提供,可以通過瀏覽器訪問。Web是一組軟件和協(xié)議的集合。Web應(yīng)用時一種是用Web瀏覽器并通過Internet或內(nèi)部往來訪問的程序,Web應(yīng)用程序通常需要Web瀏覽器,Web服務(wù)器,是基于客戶機/服務(wù)器的配置而運行的,既B/S結(jié)構(gòu)。其常見的web應(yīng)用架如下圖3-1所示:酒用虻理相阻埔求的程序納敷裾岸中傳案用戶堵束的數(shù)騰(APACHE.MS璐)V酒用虻理相阻埔求的程序納敷裾岸中傳案用戶堵束的數(shù)騰(APACHE.MS璐)V敢據(jù)庫圖3-1常見Web應(yīng)用架構(gòu)WEB應(yīng)用程序的三層結(jié)構(gòu)分別為:表示層(PresentationTier)表示層為用戶接口部分,是用戶與系統(tǒng)之間交互信息的界面。中間層(MiddleTier)也稱業(yè)務(wù)邏輯層,由WEB服務(wù)器和應(yīng)用程序服務(wù)器組成。功能層是應(yīng)用的主體,也是整個分層模型中最為重要的一層。數(shù)據(jù)層(DataTier)數(shù)據(jù)層是整個分層體系的最底層,它主要用來實現(xiàn)與數(shù)據(jù)庫的交互,即完成查詢、插入、刪除和修改數(shù)據(jù)庫中數(shù)據(jù)的功能。2、WEB系統(tǒng)通信方式大部分的Web應(yīng)用都是使用HTTP協(xié)議,少部分Web應(yīng)用特別使用HTPS協(xié)議。但我們是討論Web環(huán)境下SQL注入攻擊,所以只討論HTTP協(xié)議。即超文本協(xié)議,HTTP包含兩個階段:請求階段和響3應(yīng)階段。瀏覽器和Web服務(wù)器之間的每一次HTTP通信都包含兩個部分:頭部和主體。頭部包含了與通信的有關(guān)消息,主體包含了通信的數(shù)據(jù),當(dāng)然前提是存在這樣的數(shù)據(jù)。SQL語言1、 什么是SQL語言結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)簡稱SQL,是一種特殊目的的編程語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng);同時也是數(shù)據(jù)庫腳本文件的擴展名。2、 SQL語言的應(yīng)用結(jié)構(gòu)化查詢語言SQL(STRUCTUREDQUERYLANGUAGE)是最重要的關(guān)系數(shù)據(jù)庫操作語言,并且它的影響已經(jīng)超出數(shù)據(jù)庫領(lǐng)域,得到其他領(lǐng)域的重視和采用,如人工智能領(lǐng)域的數(shù)據(jù)檢索,第四代軟件開發(fā)工具中嵌入SQL的語言等。3、 SQL語言的語句結(jié)構(gòu)結(jié)構(gòu)化查詢語言包含6個部分:數(shù)據(jù)查詢語言(DQL:DataQueryLanguage):數(shù)據(jù)操作語言(DML:DataManipulationLanguage):事務(wù)處理語言(TPL):數(shù)據(jù)控制語言(DCL):數(shù)據(jù)定義語言(DDL):指針控制語言(CCL):4、SQL語言的特點一體化:SQL集數(shù)據(jù)定義DDL、數(shù)據(jù)操縱DML和數(shù)據(jù)控制DCL于一體,可以完成數(shù)據(jù)庫中的全部工作。使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到^C++、FORTRAN.COBOL、JAVA等主語言中使用。非過程化:只提操作要求,不必描述操作步驟,也不需要導(dǎo)航。使用時只需要告訴計算機〃做什么〃,而不需要告訴它〃怎么做〃。語言簡潔,語法簡單,好學(xué)好用:在ANSI標(biāo)準(zhǔn)中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。(三)SQL注入的實現(xiàn)結(jié)構(gòu)化查詢語言(SQL)是一種用來和數(shù)據(jù)庫交互的文本語言,SQLInjection就是利用某些數(shù)據(jù)庫的外部接口把用戶數(shù)據(jù)插入到實際的數(shù)據(jù)庫操作語言當(dāng)中,從而達到入侵?jǐn)?shù)據(jù)庫乃至操作系統(tǒng)的目的。它的產(chǎn)生主要是由于程序?qū)τ脩糨斎氲臄?shù)據(jù)沒有進行細致的過濾,導(dǎo)致非法數(shù)據(jù)的導(dǎo)入查詢。本章從使用瀏覽器與WEB應(yīng)用進行交互和一般的攻擊步驟這一視角來討論發(fā)現(xiàn)SQL注入問題。1、 SQL注入流程針對SQL注入的普遍存在性,各種SQL注入攻擊方法的實質(zhì)是基本統(tǒng)一的,所以SQL注入攻擊的流程有很大的相似性,其攻擊者采取的一般步驟如下:判斷Web應(yīng)用系統(tǒng)、發(fā)現(xiàn)注入點、掃描注入點、特殊注入點的判斷、判斷數(shù)據(jù)庫類型、判斷數(shù)據(jù)庫中的表的結(jié)構(gòu)、判斷數(shù)據(jù)庫中字段的結(jié)果、構(gòu)造注入語句進行注入、尋找管理員后臺地址登錄,并獲得Web應(yīng)用系統(tǒng)完全管理權(quán)限。以上是一般的攻擊步驟,攻擊中者一旦成功攻擊還會進一步的獲取最大目標(biāo)。比如、通過后臺獲得WebShell、獲得整個服務(wù)器的文件目錄、下載整個數(shù)據(jù)庫內(nèi)容、修改服務(wù)器注冊表、利用數(shù)據(jù)庫功能導(dǎo)入木馬并遠程控制服務(wù)器、創(chuàng)建服務(wù)器管理員權(quán)限賬戶。在以下的章節(jié)中我們會圍繞這個過程來展開SQL注入攻擊的技術(shù)研究。2、 尋找SQL注入SQL注入可以出現(xiàn)在任何從系統(tǒng)或用戶接收的數(shù)據(jù)輸入的前端應(yīng)用中,我們很難訪問到應(yīng)用的源代碼,因此需要進行黑盒測試,理解服務(wù)器的響應(yīng)時需要非常細心。尋找SQL注入漏洞存在三個關(guān)鍵點:識別Web應(yīng)用接收的數(shù)據(jù)輸入、修改輸入值以包含危險的字符串、檢測服務(wù)器返回的異常。識別SQL注入漏洞有一種簡單的規(guī)則:通過發(fā)送意外數(shù)據(jù)來觸發(fā)異常。該規(guī)則包括如下含義:識別WEB應(yīng)用上所有的數(shù)據(jù)輸入、了解那種類型的請求會觸發(fā)異常、檢測服務(wù)器響應(yīng)中的異常。包含數(shù)據(jù)庫錯誤或HTTP錯誤代碼的服務(wù)器響應(yīng)通常能降低識別SQL注入漏洞的難度。但SQL盲注是一種即使應(yīng)用不返回明顯錯誤也能利用漏洞的技術(shù)。3、 確認(rèn)SQL注入及SQL語句構(gòu)造方式要想確認(rèn)一個SQL注入漏洞并進一步加以利用,需要構(gòu)造一條注入SQL代碼的請求以便應(yīng)用創(chuàng)建一條語法正確的SQL語句,之后由數(shù)據(jù)庫服務(wù)器執(zhí)行該語句其不返回任何錯誤。在創(chuàng)建正確的語句是,可以終止它并注釋剩下的查詢。對于這種情況,通常可以毫無約束地連接任意SQL代碼(假設(shè)后臺數(shù)據(jù)接支持執(zhí)行多條語句)進而提供執(zhí)行攻擊的能力。想要構(gòu)造有效的SQL語句,首先要理解數(shù)據(jù)庫包含的不同類型,他們具有不同的表示方式,通常有數(shù)字型和字符串型。數(shù)值型不需要使用單引號來表示,字符串要有單引號表示。其示例如下:數(shù)值型:SELECT*FROMproductsWHEREvalue>200SELECT*FROMproductsWHEREactive=1字符串型:SELECT*FROMproductsWHEREname='Bike'SELECT*FROMproductsWHEREpublished_date>'01/01/2009'SELECT*FROMproductsWHEREpublished_time>'01/01/200906:30:00'kSQL注入攻擊技術(shù)防御SQL注入攻擊技術(shù)特性的核心表達式可以理解成一種通過在腳本系統(tǒng)與用戶交互中,利用存在的漏洞而進行的攻擊方式,單就SQL注入攻擊來說,如果妄圖從核心的角度防御這樣的攻擊,絕對不是簡單從腳本層面來嚴(yán)防死守就能做到徹底的防御,必須以安全是一個整體的邏輯推斷方式,從各個方面進行考慮,并力求根據(jù)最新的注入攻擊技術(shù)進行分析和防范。從存在的實際情況來看,包括Web服務(wù)器管理員、數(shù)據(jù)庫服務(wù)器管理員、數(shù)據(jù)庫設(shè)計員、代碼程序員在內(nèi)的所有工作人員都是防御體系的關(guān)鍵。我們從Web應(yīng)用程序的開發(fā)、部署、管理、維護多個方面進行審查,是程序SQL注入了漏洞最小化。我們從代碼層和平臺層兩個方面來闡述SQL注入攻擊的防御。(一)代碼層防御本節(jié)主要站在Web數(shù)據(jù)庫管設(shè)計員和編寫代碼的角度來研究SQL注入攻擊防御的。使用參數(shù)化語句前面講過動態(tài)字符串構(gòu)造是引發(fā)SQL注入漏洞的原因之一。作為一種更加安全的動態(tài)字符串構(gòu)造方法,大多數(shù)現(xiàn)代編程語言和數(shù)據(jù)庫訪問API可以使用占位符或綁定變量來向SQL查詢提供參數(shù)(而非直接對用戶輸入進行操作),這些通常稱為參數(shù)化語句內(nèi)容是更安全的方法,可以使用它們來避免或解決很多在應(yīng)用中經(jīng)常見到的SQL注入問題,并可以在大多數(shù)常見的情形中使用它們來替代現(xiàn)有的動態(tài)查詢。不過,值得注意的是,參數(shù)化語句是與一種向數(shù)據(jù)庫提供潛在的非安全參數(shù)(通常作為查詢或存儲過程調(diào)用)的方法。雖然它們不會修改傳遞給數(shù)據(jù)庫的內(nèi)容,但如果正在調(diào)用的數(shù)據(jù)庫功能在存儲過程或函數(shù)中使用了動態(tài)SQL,則任然可能出現(xiàn)SQL注入。下面是一段使用動態(tài)SQL的登陸頁面中易受攻擊的偽代碼示例。我們接下來介紹如何在java中參數(shù)化這段代碼。Username=request(〃username〃);Password=request(〃password〃);Sql="SELECT*FROMusersWHEREusername='〃+Username+"'ANDpassword='〃+Password+"'";Result=Db.Execute(Sql);If(Result)/*successfullogin*/下面的例子展示了如何使用帶命名參數(shù)的Hibernate來參數(shù)化該偽代碼:Stringsql="SELECT*FROMusersWHEREusername=:usernameAND"+"password=:password”;QuerylookupUser=session.createQuery(sql);//AddparameterstoSQLquerylookupUser.setString("username”,username);//addusernamelookupUser.setString("password”,password);//addpasswordListrs=lookupUser.list();輸出編碼處理驗證應(yīng)用受到的輸入以外,通常還需要對在應(yīng)用的不同的模塊或部分間傳遞的內(nèi)容進行編碼。在SQL注入語境中,將其發(fā)送給數(shù)據(jù)庫的內(nèi)容進行編碼或“引用”是必要的操作,這樣可以保證內(nèi)容被正確地處理。如有必要對包含字符串中的單引號進行編碼,可以使用兩個單引號替換單個單引號的方法來實現(xiàn)編碼的目的,從而有效阻止惡意用戶在特定的查詢中利用SQL注入,可以使用與下面類似的代碼在java中實現(xiàn)該目的:Sql=sql.replace(“‘“,"‘‘“);規(guī)范化輸入驗證和輸出編碼面臨的困難是:確保將正在評估或轉(zhuǎn)換的數(shù)據(jù)庫解釋成最終使用該輸入的用戶所需要的格式。避開輸入驗證和輸出編碼的常用技術(shù)是:在將輸入發(fā)送給應(yīng)用之前對其進行編碼,之后再對其進行解碼和解釋以符合攻擊者的目標(biāo)?;谶@些原因,通常最容易實現(xiàn)的一種方法是拒絕所有不符合規(guī)范化格式的輸入。例如可以拒絕應(yīng)用接收的所有HTML和URL編碼的輸入。如果無法拒絕包含編碼格式的輸入,則需要尋找解碼方法或者使用其他方法來保證接收到的數(shù)據(jù)的安全。這可能包含幾個會潛在重復(fù)多次的解碼步驟。盡可能使用白名單輸入驗證并拒絕非規(guī)范格式的輸入??梢允褂肑ava中的Normalizer類將輸入標(biāo)準(zhǔn)化:normalized=Normalizer.normalize(input,Normalizer.Form.NFKC);。通過設(shè)計來避免SQL注入使用存儲過程。使用抽象層。處理敏感數(shù)據(jù)。避免明顯的對象名和創(chuàng)建數(shù)據(jù)庫。確保數(shù)據(jù)庫安全數(shù)據(jù)庫是Web應(yīng)用架構(gòu)的一個重要組成部分,對于確保數(shù)據(jù)庫安全對于防御SQL注入是至關(guān)重要的。分離數(shù)據(jù)庫服務(wù)器和Web頁面發(fā)布服務(wù)器。隔離數(shù)據(jù)庫服務(wù)器:是指將網(wǎng)絡(luò)安全中的最小化安全法則應(yīng)用到數(shù)據(jù)庫服務(wù)器的網(wǎng)絡(luò)連接上,一般做法是,使用防火墻或不能聯(lián)網(wǎng)的IP地址來阻止任何用戶到數(shù)據(jù)庫服務(wù)器的因特網(wǎng)訪問。為數(shù)據(jù)庫服務(wù)器增加訪問控制:當(dāng)管理員從網(wǎng)絡(luò)中隔離出來數(shù)據(jù)庫服務(wù)器之后,需要在數(shù)據(jù)庫服務(wù)器上配置可信任的IP接入和訪問。以控制那些機器能夠與數(shù)據(jù)庫服務(wù)器通信。數(shù)據(jù)庫服務(wù)器本身的最小化安全:從數(shù)據(jù)庫服務(wù)器上移除所有示例腳本和應(yīng)用程序,即讓數(shù)據(jù)庫服務(wù)器除了提供數(shù)據(jù)交互的功能以外,不能提供任何其他常規(guī)的服務(wù)器功能。刪除或修改默認(rèn)高權(quán)數(shù)據(jù)庫連接賬戶:管理員應(yīng)該與程序開發(fā)者協(xié)同工作,在能實現(xiàn)應(yīng)用系統(tǒng)的腳本功能的前提下,將數(shù)據(jù)庫中默認(rèn)的管理賬戶、高權(quán)賬戶刪除或修改。嚴(yán)格監(jiān)控或者刪除數(shù)據(jù)庫高權(quán)用戶:管理員應(yīng)該與應(yīng)用程序開發(fā)者協(xié)同,以代碼和服務(wù)器相結(jié)合的方式,為每個應(yīng)用程序的數(shù)據(jù)庫連接賬戶使用一個專用的低特權(quán)賬戶。建立數(shù)據(jù)庫表的安全訪問機制:不要允許用戶或應(yīng)用程序直接訪問數(shù)據(jù)庫表。如果應(yīng)用程序一定要使用對數(shù)據(jù)庫擁有有限訪問的應(yīng)用程序角色,或者某應(yīng)用程序需要讀取數(shù)據(jù)庫表,應(yīng)將數(shù)據(jù)庫的訪問限制為只讀。限制存儲過程的使用:對于不需的存儲過程應(yīng)該刪除或者禁用,應(yīng)該以用戶創(chuàng)建的存儲過程代替危險的存儲過程。五、SQL注入攻擊犯罪的應(yīng)對(一) ,。1注入攻擊犯罪概述隨著互聯(lián)網(wǎng)的快速發(fā)展,黑客隊伍日益壯大,其網(wǎng)絡(luò)攻擊技術(shù)不斷成熟,公安機關(guān)網(wǎng)絡(luò)執(zhí)法工作將面臨嚴(yán)重的挑戰(zhàn)。本文所講的sql注入攻擊為黑客常用的攻擊手段,公安機關(guān)網(wǎng)絡(luò)工作人員應(yīng)當(dāng)提前做好遏制網(wǎng)絡(luò)攻擊犯罪的宣傳工作,并且要深層次了解sql注入攻擊原理,以及熟練掌握各種防御手段。當(dāng)接到被攻擊者報案,予以立案后,公安機關(guān)網(wǎng)絡(luò)執(zhí)法者要立即查明案情,確定犯罪來源,運用先進的防御技術(shù)和偵察手段,遏制犯罪行為再次發(fā)生。在眾多案情中,被攻擊者遭遇攻擊的原因是沒有提前做好sql注入攻擊的預(yù)防工作,其主要原因是網(wǎng)絡(luò)開發(fā)者沒有遵循安全代碼開發(fā)的要求,因此,要避免sql注入攻擊,必須要提前做好預(yù)防工作。(二) SQL注入攻擊犯罪的預(yù)防1、 過濾掉特殊字符。2、 分離數(shù)據(jù)庫服務(wù)器與web服務(wù)器3、 web應(yīng)用程序使用專門的數(shù)據(jù)庫低權(quán)連接賬戶(三) SQL注入攻擊犯罪的應(yīng)對方法從安全技術(shù)手段上來說,可以通過數(shù)據(jù)庫防火墻實現(xiàn)對SQL注入攻擊的防范,因為SQL注入攻擊往往是通過應(yīng)用程序來進攻,可以使用虛擬補丁技術(shù)實現(xiàn)對注入攻擊的SQL特征識別,實現(xiàn)實時攻擊阻斷。如果互聯(lián)網(wǎng)Web服務(wù)器遭到SQL注入攻擊,請遵循如下步驟:1、 關(guān)閉網(wǎng)站2、 檢查II
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《皮膚性病學(xué)濕疹》課件
- 行政后勤財務(wù)報銷審核
- 母親節(jié) 營銷新視角
- 體育行業(yè)話務(wù)員工作總結(jié)
- 餐飲行業(yè)服務(wù)員的服務(wù)宗旨
- 體育場館的衛(wèi)生清潔
- 2023-2024年企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題考題
- 2023-2024安全培訓(xùn)考試題及答案(新)
- 函授??飘厴I(yè)自我鑒定15篇
- 課題研究報告
- 2024版企業(yè)股權(quán)收購并購重組方案合同3篇
- 2024AIGC創(chuàng)新應(yīng)用洞察報告
- 統(tǒng)編版2024-2025學(xué)年三年級上冊語文期末情景試卷(含答案)
- 2024北京通州初三(上)期末數(shù)學(xué)試卷(含答案解析)
- 市場營銷習(xí)題庫(附參考答案)
- 2024年馬拉松比賽項目合作計劃書
- 2024年演出經(jīng)紀(jì)人資格《思想政治與法律基礎(chǔ)》考前必刷必練題庫500題(含真題、必會題)
- 苗圃購銷合同范本
- 《二十四節(jié)氣融入幼兒園教育活動的個案研究》
- 2024年食品生產(chǎn)企業(yè)食品安全管理人員監(jiān)督抽查考試題庫(含答案)
- 高速公路瀝青路面設(shè)計計算書(Word)
評論
0/150
提交評論