亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        SQL 注入攻擊的分析與防范

        2021-06-24 11:22:44翟寶峰
        關(guān)鍵詞:攻擊者語句應(yīng)用程序

        翟寶峰

        (遼寧工業(yè)大學(xué) 軟件學(xué)院,遼寧 錦州 121001)

        互聯(lián)網(wǎng)已經(jīng)在社會各領(lǐng)域中得到了廣泛應(yīng)用,互聯(lián)網(wǎng)上應(yīng)用程序模式采用B/S 框架結(jié)構(gòu),即WEB應(yīng)用程序,優(yōu)點(diǎn)是不局限于某個(gè)單位的局域網(wǎng)內(nèi)部,而是面向全世界,具有開放性的特點(diǎn),部署起來也很方便,促進(jìn)了各行各業(yè)信息化的發(fā)展。

        大量單位及個(gè)人可以通過網(wǎng)絡(luò)訪問WEB 應(yīng)用程序,給用戶帶來了方便,但由于互聯(lián)網(wǎng)的開放性,給數(shù)據(jù)訪問帶來了風(fēng)險(xiǎn),不法分子對以數(shù)據(jù)庫為核心的攻擊越來越多,方式也是多種多樣。目前大多數(shù)數(shù)據(jù)庫均采用關(guān)系型數(shù)據(jù)庫,而關(guān)系型數(shù)據(jù)庫采用的操縱語言是SQL 語言,SQL 語言的安全使用成為數(shù)據(jù)安全訪問的核心問題。

        1 SQL 注入產(chǎn)生原因

        1.1 WEB 應(yīng)用程序結(jié)構(gòu)

        WEB 應(yīng)用程序由3 大部分組成,包括客戶端程序、WEB 服務(wù)程序、數(shù)據(jù)庫服務(wù)程序[1],如圖1所示。

        圖1 WEB 應(yīng)用程序結(jié)構(gòu)

        客戶端用戶通過瀏覽器向WEB 服務(wù)器發(fā)出URL 請求,WEB 服務(wù)器調(diào)用相應(yīng)的程序處理請求,如果處理過程中需要訪問數(shù)據(jù)庫,WEB 服務(wù)器會把訪問數(shù)據(jù)庫的請求發(fā)給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器根據(jù)此請求,對數(shù)據(jù)進(jìn)行處理,再把結(jié)果傳給WEB 服務(wù)器,WEB 把最后的處理結(jié)果以網(wǎng)頁形式傳回客戶端,客戶端瀏覽器再把結(jié)果呈現(xiàn)給用戶?;ヂ?lián)網(wǎng)的用戶原則上都能訪問WEB 應(yīng)用程序,方便了用戶的同時(shí),也給網(wǎng)絡(luò)攻擊者提供了機(jī)會,給數(shù)據(jù)庫服務(wù)器的訪問帶來了不安全的因素,SQL 攻擊也存在了可能性。

        1.2 SQL 注入

        WEB 應(yīng)用程序的SQL 注入,就是把SQL 命令插入到網(wǎng)頁表單、URL 的參數(shù)或頁面請求的查詢字符串中,形成含有SQL 攻擊的語句,服務(wù)器執(zhí)行這些語句,攻擊者就達(dá)到欺騙服務(wù)器執(zhí)行惡意SQL命令的目的[2]。

        SQL 注入產(chǎn)生的原因主要有[3]:

        (1)SQL 語言是屬于拼接式的語言,尤其查詢條件字符串也可以拼接而成,注入者違反程序設(shè)計(jì)者的初衷,拼接了合法的和非法的查詢條件,形成含有SQL 注入的SQL 語句。

        (2)應(yīng)用程序設(shè)計(jì)編寫不嚴(yán)謹(jǐn),沒有對SQL 命令的參數(shù)進(jìn)行相應(yīng)的檢查和過濾,直接把用戶提交的內(nèi)容與SQL 命令的關(guān)鍵詞拼接成SQL 語句,提交給數(shù)據(jù)庫服務(wù)器執(zhí)行,完成了SQL 的注入攻擊。

        2 SQL 注入類型及實(shí)現(xiàn)

        SQL 注入從不同角度看,有不同的類型。從注入點(diǎn)上看,有數(shù)字注入點(diǎn)、字符注入點(diǎn)、搜索注入點(diǎn);從提交方式來分類,可分為GET 注入、POST注入、Cookie 注入、HTTP 頭注入;從執(zhí)行效果來分類,有布爾盲注、時(shí)間盲注、報(bào)錯(cuò)注入、聯(lián)合查詢注入、堆查詢注入,還有其他種種劃分方法。

        一般根據(jù)構(gòu)造SQL 語句的類型,劃分不同SQL注入類型,是漏洞檢查及攻擊防御所采用的基本方法[4]。

        (1)永真條件,將注入代碼插入到查詢條件中,使查詢條件永為真。例如用戶登錄時(shí)提供用戶名和密碼,輸入?yún)?shù)值注入or ‘1’=’1’,則無論用戶名、密碼是否正確,查詢條件都為真,語句就會形成如下:

        Select * from t_users where name=’***’ and pwd=’***’ or ‘1’=’1’

        (2)系統(tǒng)報(bào)錯(cuò),DBMS 內(nèi)部信息存放在變量中或函數(shù)表示,如SQLServe 中當(dāng)前數(shù)據(jù)庫連接用戶名用user,數(shù)據(jù)庫名用db_name()等等,用這些變量名或函數(shù)寫成產(chǎn)生錯(cuò)誤的表達(dá)式,如:and user>1拼接,因?yàn)閡ser 為字符型的,轉(zhuǎn)成int 型會報(bào)錯(cuò),系統(tǒng)提示:“將nvarchar 轉(zhuǎn)換int 異常,XXXX 不能轉(zhuǎn)換成int”,就可以知道當(dāng)前連接的用戶名是XXXX。也可以利用附加and (select count(字段名) from 表名)>1 猜測表名或字段名。這種方法可以嗅探出數(shù)據(jù)庫系統(tǒng)的相關(guān)信息。

        (3)Union 聯(lián)合查詢,Union 是將2 個(gè)Select 查詢結(jié)果放在一起返回,利用這一特點(diǎn)進(jìn)行拼接,得到想要的信息,例如:Select * from t_users where name=’***’ and pwd=’***’是用戶登錄驗(yàn)證語句,在后面加上Union Select * from t_users where id=1,前一語句結(jié)果為空時(shí)就會得到序號為‘1’用戶信息。另外,當(dāng)后面加入U(xiǎn)nion Select 1,2,3,可以試探出字段名。

        (4)連接更新語句,一旦攻擊者通過試探注入得知表名及字段名,就可以在提交的參數(shù)中植入更新語句,實(shí)現(xiàn)增加、刪除、修改記錄,用‘;’把提交的參數(shù)與注入的語句隔開一起提交執(zhí)行,如:Select * from t_users where name=’***’ and pwd=’***’;update t_users set name=‘李軍’where id=3,將3 號用戶名更改為‘李軍’。如果登錄者權(quán)限很高時(shí),還可以連接DDL 語句如drop student,如果完整性符合要求,將刪除student 表,造成更大損失。

        (5)編碼轉(zhuǎn)換,當(dāng)系統(tǒng)中設(shè)有過濾防御機(jī)制時(shí),將注入的特殊命令,以十六進(jìn)制、ASCⅡ等不常用的編碼機(jī)制輸入,如:SHUTDOWN(關(guān)閉數(shù)據(jù)庫)寫成0x5348555444F574E十六進(jìn)制形式,SQL語句:Select * from t_users where name=’ABC’;exec(char(0x5348555444F574E))--and pwd=’***’,將繞過過濾機(jī)制而提交。

        (6)SQL 盲注[5],當(dāng)系統(tǒng)對SQL 語句響應(yīng)只返回true 或false 時(shí),有時(shí)甚至沒有響應(yīng)結(jié)果,例如:登錄是否成功。這時(shí)系統(tǒng)報(bào)錯(cuò)的注入就無效了,響應(yīng)信息極少或沒有的情況下的注入攻擊稱為盲注,這種注入是一種暴力破解,需要時(shí)間較長??煞譃椴紶柮ぷ⑴c時(shí)間盲注。

        布爾盲注:雖然系統(tǒng)響應(yīng)僅僅有2 個(gè)狀態(tài),無法根據(jù)響應(yīng)信息得到所需數(shù)據(jù),但可以通過邏輯判斷來逐步得到完整信息。例如,想得到數(shù)據(jù)庫的名字,可以在查詢參數(shù)上附加:

        and select length(database())>n//判斷數(shù)據(jù)庫名長度and ascii(substr(database(),m,1))>n//第m 個(gè)字符并轉(zhuǎn)換成ascii 碼,判斷具體值。

        寫一個(gè)循環(huán)程序反復(fù)試探n 的值,結(jié)果為真時(shí),附加條件為真,結(jié)果為假時(shí),附加條件為假,根據(jù)結(jié)果的真?zhèn)蝸淼玫秸_數(shù)據(jù),在循環(huán)程序中也可用折半方法加快檢索速度。類似方法可以從系統(tǒng)表中得到表名,以及從具體業(yè)務(wù)表中得到表的字段名、類型、長度等信息。

        時(shí)間盲注:在SQL 注入時(shí),不管注入是否成功,系統(tǒng)都沒有相應(yīng),這時(shí)可通過數(shù)據(jù)庫的延時(shí)函數(shù)來判斷注入點(diǎn),采用響應(yīng)時(shí)間上的差異來判斷是否存在SQL 注入,即時(shí)間盲注。

        這里需要用到一個(gè)MySQL 的sleep(n)函數(shù),功能是休眠n 秒,sleep()函數(shù)執(zhí)行是有條件的,必須保障SQL 語句執(zhí)行結(jié)果存在數(shù)據(jù)記錄,才會停止指定的秒數(shù),如果SQL 語句查詢結(jié)果為空,那么sleep函數(shù)不會停止。枚舉當(dāng)前數(shù)據(jù)庫名:

        id=1' and sleep(3) and ascii(substr (database(),m,1))>n --+

        邏輯判斷函數(shù)if(),if (expr1,expr2,expr3)如果expr1 為真,則if 函數(shù)執(zhí)行expr2 語句,否則if 函數(shù)執(zhí)行expr3 語句。枚舉當(dāng)前數(shù)據(jù)庫的表名:

        id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit a,1),m,1)) >n,sleep(3),1) --+

        根據(jù)響應(yīng)時(shí)間可以分析出所要的數(shù)據(jù),同樣采用循環(huán)方法,得出全部信息。

        以上是當(dāng)前SQL 注入攻擊的常用方法,隨著關(guān)系庫數(shù)據(jù)庫的廣泛應(yīng)用,SQL 注入也會不斷增加,SQL 注入的防范方法也會隨之加強(qiáng)。

        3 SQL 注入防范

        由于WEB 應(yīng)用程序?qū)崿F(xiàn)的技術(shù)不同,SQL 注入攻擊也不同,對應(yīng)的防范方法也有所區(qū)別,但總體上,還是針對WEB 應(yīng)用程序3 個(gè)組成部分上進(jìn)行的。歸納起來有以下幾種方法。

        (1)輸入檢查,網(wǎng)頁在提交數(shù)據(jù)時(shí),可以通過正則表達(dá)式的篩選及長度的限制對提交數(shù)據(jù)進(jìn)行檢查。如正則表達(dá)式[6]:

        @"s?ors*|s?;s?|s?drops|s?grants|^'|s?--|s?u nions|s?deletes|s?truncates|"+@"s?sysobjectss?|s?xp_.*?|s?sysloginss?|s?sysremotes?|s?sysuserss?|s?sysxloginss?|s?sysdatabasess?|s?aspnet_.*?|s?ex ecs?"。但是,有時(shí)攻擊者可以得到網(wǎng)頁源代碼,進(jìn)行修改后,將非法數(shù)據(jù)提交給服務(wù)器。因此,WEB服務(wù)器接收數(shù)據(jù)時(shí),也應(yīng)進(jìn)行相應(yīng)的驗(yàn)證。有些特殊注入,也可特殊處理,如針對登錄操作的永真條件注入時(shí),可以多加判斷條件,例如:

        If (Select count(*) from t_users where name=’***’ and pwd=’***’or‘1’=’1’)>1

        當(dāng)條件滿足時(shí),往往是注入攻擊,拒絕登錄。

        (2)錯(cuò)誤消息封裝,系統(tǒng)提供的錯(cuò)誤消息不要直接提供給客戶端,經(jīng)過對象封裝后,把提示信息盡量減少,使注入者得不到有效的數(shù)據(jù)。

        (3)避免拼接SQL 語句使用,從SQL 注入分類上看,注入基本上是通過SQL 語句拼接實(shí)現(xiàn)的。使用參數(shù)化的SQL 語句或存儲過程進(jìn)行數(shù)據(jù)查詢,例如:prepareStatement(String sql),第一次操作數(shù)據(jù)庫之前,SQL 語句已經(jīng)被數(shù)據(jù)庫分析和編譯,對應(yīng)的執(zhí)行計(jì)劃也會緩存下來,之后數(shù)據(jù)庫就會以參數(shù)化的形式進(jìn)行查詢。當(dāng)運(yùn)行時(shí)動態(tài)地把參數(shù)傳給PreprareStatement 時(shí),即使參數(shù)里有敏感字符or ‘1=1’,也會作為一個(gè)字段的值來處理,而不會作為另一個(gè)查詢條件。

        (4)禁止使用管理員賬號連接數(shù)據(jù)庫,管理員對數(shù)據(jù)庫具有最高的訪問權(quán)限,一旦被注入者登錄成功,數(shù)據(jù)庫的危險(xiǎn)性會更大。要為每個(gè)應(yīng)用程序分配獨(dú)立的連接賬戶,數(shù)據(jù)庫對象權(quán)限由管理員嚴(yán)格控制,慎重分配更新操作insert、delete、update權(quán)限,對于DDL 命令權(quán)限drop、alter、create 等,原則上應(yīng)禁止分配給連接賬號。

        (5)數(shù)據(jù)加密,對于重要數(shù)據(jù)要加密保存,例如用戶的密碼以MD5 方法加鹽加密,保存到數(shù)據(jù)庫中[7]。當(dāng)用戶登錄時(shí),輸入的密碼也必須通過同樣方法加密后,與數(shù)據(jù)庫中的加密密碼比較,客戶端無論輸入什么參數(shù)值,即使含有or '1=1',都必須加密形成一個(gè)值進(jìn)行比較,起不到永真條件作用,登錄失敗。

        (6)使用框架,WEB 應(yīng)用程序開發(fā)時(shí),可以使用各大公司提供的開發(fā)框架,這不僅有利于程序的開發(fā),也會有效地防止大多SQL 注入攻擊,例如:安全框架security、shiro 以及ORM 框架Hibernate、Hibernate 等。

        (7)專業(yè)工具檢查,利用WEB 應(yīng)用程序漏洞掃描工具,如Acunetix、jsky 等工具軟件。對系統(tǒng)進(jìn)行全面的掃描檢查,發(fā)現(xiàn)系統(tǒng)中存在的SQL 注入漏洞,及時(shí)進(jìn)行防范處理。

        (8)安全性驗(yàn)收,系統(tǒng)竣工驗(yàn)收時(shí),除了進(jìn)行功能和性能的驗(yàn)收外,還要詳細(xì)地對系統(tǒng)的安全性進(jìn)行驗(yàn)收,聽取專家的意見,對不安全的隱患進(jìn)行改進(jìn),對可能產(chǎn)生SQL 注入之處進(jìn)行檢查,使系統(tǒng)更安全。

        4 結(jié)束語

        SQL 注入攻擊具有隱蔽性、欺騙性,不易被察覺,注入方法也在不斷翻新,直接威脅著WEB 應(yīng)用程序的安全。所以在WEB 應(yīng)用程序開發(fā)時(shí),SQL 注入攻擊的防御也應(yīng)重點(diǎn)考慮,編程人員要提高代碼的安全性意識,編寫代碼要嚴(yán)謹(jǐn),采用完備的防范攻擊手段,對漏洞進(jìn)行全面檢測,不給攻擊者留下SQL 注入的漏洞,確保系統(tǒng)安全運(yùn)行。

        猜你喜歡
        攻擊者語句應(yīng)用程序
        基于微分博弈的追逃問題最優(yōu)策略設(shè)計(jì)
        重點(diǎn):語句銜接
        刪除Win10中自帶的應(yīng)用程序
        正面迎接批判
        愛你(2018年16期)2018-06-21 03:28:44
        精彩語句
        有限次重復(fù)博弈下的網(wǎng)絡(luò)攻擊行為研究
        如何搞定語句銜接題
        語文知識(2014年4期)2014-02-28 21:59:52
        關(guān)閉應(yīng)用程序更新提醒
        電腦迷(2012年15期)2012-04-29 17:09:47
        三星電子將開設(shè)應(yīng)用程序下載商店
        作文語句實(shí)錄
        亚洲一区二区精品久久岳| 免费看黄a级毛片| 国产a v无码专区亚洲av| 成人无码无遮挡很H在线播放| 熟女高潮av一区二区| 日本伊人精品一区二区三区| 欧美大屁股xxxxhd黑色| 国产免费看网站v片不遮挡| 国产午夜福利av在线麻豆| 亚洲综合av一区二区三区蜜桃| 亚洲日韩一区二区三区| 国产美女在线精品亚洲二区| 国产av一区仑乱久久精品| 黄色av一区二区在线观看| 久久人与动人物a级毛片| 日本精品网| 国产久久久自拍视频在线观看| 免费在线黄色电影| 日韩精品人妻系列无码专区免费| 国产码欧美日韩高清综合一区| av网页免费在线观看| 大胸少妇午夜三级| 尤物视频一区二区| 中文字幕 在线一区二区| 亚洲精品久久久久一区二区| 精品亚洲成a人7777在线观看 | 久久dvd| 韩国一区二区三区黄色录像| 亚洲国产成人久久三区| 亚洲福利视频一区| 偷柏自拍亚洲综合在线| 久久国产精品亚洲婷婷片| 在线亚洲午夜理论av大片| 日韩国产精品一本一区馆/在线 | 国产日韩AV无码免费一区二区| 99久久精品一区二区国产| 亚洲精品无码久久久影院相关影片| 亚洲午夜精品a区| 视频一区中文字幕日韩| 少妇被爽到高潮喷水久久欧美精品| 亚洲综合无码一区二区三区|