999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

SQL注入攻擊與防范技術研究

2017-01-18 11:30:26胡萍浙江理工大學科技與藝術學院現代教育技術中心
消費導刊 2016年12期
關鍵詞:數據庫用戶

胡萍 浙江理工大學科技與藝術學院現代教育技術中心

陳志鵬 中國聯通杭州市分公司

SQL注入攻擊與防范技術研究

胡萍 浙江理工大學科技與藝術學院現代教育技術中心

陳志鵬 中國聯通杭州市分公司

隨著互聯網的發展,Web應用無處不在,近幾年不斷爆出Web應用系統信息泄露的重大安全事件,大多與SQL注入漏洞有關,SQL注入的危害可見一斑,它是Web應用最為常見的漏洞之一。本文通過簡單示例詳細闡述了SQL注入攻擊的基本原理,并深入分析SQL注入攻擊過程,歸納出了SQL注入的五個行為特征,并從五個行為特征出發,針對性地提出了防范SQL注入攻擊的有效方法和策略。

SQL注入攻擊 Web應用 漏洞 安全

引言

隨著信息技術和互聯網的發展,后臺數據庫聚集著大量個人信息和專有信息,這些信息具有很高的經濟價值,是最寶貴的資產,因此,后臺數據庫很容易被盯上并入侵。數據庫入侵攻擊可以大致分為兩類:一類是通過數據庫漏洞或者非法獲取數據庫賬號直接入侵數據庫;另一類是通過Web應用程序漏洞間接入侵數據庫,這種類型的數據庫入侵是眾所周知的SQL注入攻擊(SQLIA)。通常數據庫不直接面向用戶,第一類攻擊出現的可能性較小,不在本文討論范圍,本文主要針對第二類攻擊進行研究。SQL注入攻擊從Web誕生到現在一直沒停過,許多公司的Web應用系統都曾經遭受SQL注入攻擊,甚至被拖庫,不但給公司造成了經濟損失,而且對公司品牌和形象產生負面影響。本文將對SQL注入攻擊的原理和過程進行深入分析,并提出有效防范手段。

一、SQL注入攻擊原理

SQL注入攻擊是攻擊者通過正常的Web頁面輸入,并向Web應用程序提交特定的SQL代碼,從而讓后臺數據庫執行一些非授權的SQL代碼,以達到竊取、修改、甚至破壞數據庫信息的目的。攻擊者還可以利用SQL注入漏洞繞過用戶認證機制,并完全控制遠程服務器的數據庫。如果程序員在開發WEB應用程序時,習慣使用用戶輸入的參數動態構造SQL語句去訪問后臺數據庫,將更容易遭到SQL注入攻擊。接下來,通過一個簡單示例來剖析SQL注入原理。

下面這個SQL語句是Web應用程序典型用來驗證用戶登錄名和密碼的。

Select * from users where username=’$name’ and password = md5(‘$pwd’);

其中$name為用戶輸入的用戶名,$pwd為用戶輸入的密碼,后臺Web應用程序使用$name和$pwd兩個參數構建動態的SQL語句提交到后臺數據庫執行,根據返回結果來判定驗證是否成功。假定用戶輸入的$name為“admin”,$pwd為“disos321!”,那么應用程序就構造的SQL語句如下:

Select * from users where username=’admin’ and password = md5(‘disos321!’);

如果匹配成功,則數據庫返回記錄集,應用程序判定為驗證成功;否則,數據庫返回空集,應用程序判定為驗證失敗。上面這個Web登陸驗證是存在SQL注入漏洞的。當攻擊者輸入的$name為“admin’#”,$pwd為任何值(如:“123456”)時,那么Web應用程序構建的SQL語句如下:

Select * from users where username=’admin’#’ and password = md5(‘123456’);

在mysql數據庫的SQL語句中,#是注釋符號,#后面語句將被忽略(有的數據庫用--作為注釋符號),因此,用戶按照上面方式輸入用戶名,即使不知道密碼,也能登錄成功,這樣攻擊者便繞過了驗證直接進入系統。

當然,攻擊者還可以通過MySQL的多語句執行功能進一步攻擊,當攻擊者輸入的$name為“update users set password=md5(‘123456’);#”,$pwd為任何值(如:“123456”)時,Web應用程序構建的SQL語句為:

select * from users where username=’admin’;update users set password=md5(‘123456’);#’ and password=md5(‘123456’);

假設應用程序使用的數據庫用戶具有更新權限,附加的“update users set password=md5(‘123456’);”語句將會一同被執行,這樣應用系統數據將被破壞。

二、SQL注入攻擊過程

圖1 典型的SQL注入攻擊過程

如圖1所示,典型的SQL注入攻擊過程可分為五個步驟:

第一步:SQL注入點探測。探測SQL注入點是關鍵的一步,通過適當的分析應用程序,可以判斷什么地方存在SQL注入點。通常只要帶有輸入提交的動態網頁,并且動態網頁訪問數據庫,就可能存在SQL注入漏洞。如果程序員信息安全意識不強,采用動態構造SQL語句訪問數據庫,并且對用戶的輸入未進行有效性驗證,則存在SQL注入漏洞的可能性很大。一般通過頁面的報錯信息來確定是否存在SQL注入漏洞。

第二步:收集后臺數據庫信息。不同數據庫的注入方法、函數都不盡相同,因此在注入之前,我們先要判斷一下數據庫的類型。判斷數據庫類型的方法很多,可以輸入特殊字符,如單引號,讓程序返回錯誤信息,我們根據錯誤信息提示進行判斷;還可以使用特定函數來判斷,比如輸入“1 and version()>0”,程序返回正常,說明version()函數被數據庫識別并執行,而version()函數是MySQL特有的函數,因此可以推斷后臺數據庫為MySQL。

第三步:猜解用戶名和密碼。數據庫中的表和字段命名一般都是有規律的。通過構造特殊SQL語句在數據庫中依次猜解出表名、字段名、字段數、用戶名和密碼。首先通過輸入“and (select count(*) from 表名)<>0”構造特殊SQL來猜測后臺數據庫可能存在的表;接著通過 “and (select count(列名) from 表名)<>0”來猜解表字段名;再通過“order by 字段序號”來猜解字段數量;最后通過“and (select count(*) from表名where left(列名,1)=’猜解的字符’)<>0”來猜解用戶名和密碼,如果是查詢顯示的頁面,還可以使用union select聯合查詢直接獲取用戶名、密碼,比如使用“union select 1,2,user,4,passwd,6 from admin”可以從已經猜解出的表名admin和字段名user、passwd獲取用戶名和密碼。這個猜解過程可以借助SQL注入工具(如:sqlmap、Pangolin)快速實現,并輕易破譯網站的用戶名和密碼。

第四步:查找Web后臺管理入口。WEB后臺管理通常不對普通用戶開放,要找到后臺管理的登錄網址,可以利用Web目錄掃描工具(如:wwwscan、AWVS)快速搜索到可能的登錄地址,然后逐一嘗試,便可以找到后臺管理平臺的登錄網址。

第五步:入侵和破壞。一般后臺管理具有較高權限和較多的功能,使用前面已破譯的用戶名、密碼成功登錄后臺管理平臺后,就可以任意進行破壞,比如上傳木馬、篡改網頁、修改和竊取信息等,還可以進一步提權,入侵Web服務器和數據庫服務器。

三、SQL注入攻擊防護

通過上面的分析,我們可以歸納出SQL注入攻擊具有五大行為特征:非法輸入、SQL拼接、頻繁測試、越權執行和竊取信息,針對這些行為特征,本文總結了相應的防范措施如下:

(1)對于非法輸入,可采用合法性驗證進行規范。如果Web應用程序在接收到用戶輸入的數據后進行合法性檢查再提交數據庫執行,則能有效防范SQL注入攻擊的發生。合法性檢查有兩種方式:白名單和黑名單。白名單檢查是指用事先定義好的數據規則來檢查用戶輸入數據,符合則通過,例如檢查用戶輸入身份證號,是否符合1至17位為數字、第18為數字或字母的規則,如果符合就處理,如果不符合則拒絕,可以采用正則表達式來檢查。黑名單檢查是指通過檢查用戶輸入數據中是否包含事先定義好的非法字符系列,符合則拒絕,非法字符系列一般包括select、from、where等SQL關鍵字。

(2)對于SQL拼接,可替換成參數化的SQL來防范。參數化的SQL操作是最有效的防范SQL注入方法。在where條件個數明確的情況下,參數化SQL操作較為簡單。但往往where條件不明確的,需要根據用戶的選擇作為條件,這種情況就比較復雜,程序員往往就容易采用動態拼接SQL方式操作數據庫,尤其條件非常多的情況下,按照用戶查詢的不同條件,通通過if...else..條件判斷拼接sql語句,導致了sql注入漏洞的產生。針對第二種情況,同樣可以改造成參數化SQL語句操作。PHP示例代碼如下:

if (!empty($begin_date) && strlen($begin_date)>0) {#根據用戶選擇判斷

array_push($sql_builder," and begin_date >= ?");

array_push($sql_params,$begin_date);

}

$sql="select * from users where 1=1";

foreach($sql_builder as $k => $v) {

$sql = $sql . $v; #動態構造參數化的SQL

}

$stmt=$pdo->prepare($sql); #SQL預編譯

f

oreach($sql_params as $k => $v) {

$stmt->bindParam($k+1,$v); #動態綁定參數

}

$stmt->execute();#執行查詢

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ #處理返回結果 }

(3)對于頻繁測試的行為特征,可通過在應用程序與數據庫之間部署數據庫防火墻進行檢測與防御。數據庫防火墻能識別來自外部的攻擊行為,并通過對SQL語法/詞法中存在的風險進行精確識別,能夠進行細粒度權限管控、行為審計、監測分析等,能在一定范圍內發現和阻止SQL注入攻擊,以防止攻擊者對數據庫進行入侵。

(4)對于越權執行的行為,可通過規范Web應用程序和數據庫授權加以管控。Web應用程序和數據庫運行和使用遵循權限最小化原則,即使用符合需求的最小權限的用戶運行Web應用程序和數據庫,Web應用程序使用符合需求的最小權限訪問數據庫。Web應用程序和數據庫配置的啟動賬戶如果屬于系統管理員組,則攻擊者在獲取Web應用程序和數據庫控制權后就可以方便地用管理員的特權進行攻擊,從而造成更大的威脅。因此,應該將運行Web應用程序和數據庫配置的操作系統賬號配置成最小權限。同時,應限制Web應用程序和數據庫中的一些額外功能的執行權限。比如在MySQL數據庫中,應考慮禁用LOCAL INFILE命令,這有助于防止攻擊者通過SQL注入漏洞訪問服務器本地文件。

(5)對竊取信息的行為,可以采取信息加密存儲方式進行保護。對用戶名、密碼等敏感信息通過加密處理后再存放在數據庫中,即便被攻擊者獲得,也將無法得到有價值的信息。

四、結束語

本文對SQL注入攻擊原理和過程進行詳細、深入分析,歸納出了SQL注入的五大行為特征,并針對每個行為特征提出了相應防護手段,通過這樣多層次、全方位的安全防范,能大大降低SQL注入的風險。但信息安全問題層出不窮,網絡攻擊手段日新月異,SQL注入漏洞也不例外,不存在百分之百安全的Web應用系統。Web應用開發人員和維護人員應與時俱進,及時了解新的安全漏洞,掌握新的應對措施,最大限度的保障Web應用系統的安全。

[1]王希忠等.Web應用程序中SQL注入攻防策略的研究[J].信息安全與技術,2011,(9).

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

[3]AnleyC.Advanced SQL injection in SQL server applications[EB/ OL].http: //www. creangel.com/papers/advanced_sql_injection. pdf.

[4]德丸浩. Web應用安全權威指南[M].北京:人民郵電出版社.2014 [3]陳小兵, 張漢煜, 駱力明等.

[5]陳小兵, 張漢煜, 駱力明等.SQL注入攻擊及其防范檢測技術研究[J]. 計算機工程與應用, 2010,43(11):150-152.

[6]王溢, 李舟軍, 郭濤.防御代碼注入式攻擊的字面值污染方法[J].計算機研究與發展, 2012,49(11):2414-2423.

[7]周淡.SQL注入檢測方法的研究與實現[D]. 西安:西北大學, 2011.

胡萍(1978-),女,漢族,湖北黃岡人,浙江理工大學科技與藝術學院現代教育技術中心,講師。陳志鵬(1978-),男,漢族,福建三明人,中國聯通杭州市分公司,工程師。

本文系浙江理工大學科技與藝術學院2015年度重點課程建設項目和2015年浙江省高等教育教學改革項目和課堂教學改革項目(項目編號:Kg2015547)的研究成果。

猜你喜歡
數據庫用戶
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 午夜无码一区二区三区在线app| 91久久国产成人免费观看| 19国产精品麻豆免费观看| 国产精品一区二区不卡的视频| 欧美日韩精品一区二区在线线| 天天躁夜夜躁狠狠躁躁88| 国产在线一区视频| 国产精品欧美日本韩免费一区二区三区不卡 | 手机永久AV在线播放| 国产18在线| 无遮挡一级毛片呦女视频| 色成人亚洲| 国产精品理论片| 国产人在线成免费视频| 亚洲浓毛av| 国产在线啪| 暴力调教一区二区三区| 天天色天天综合网| 欧美日韩另类国产| 亚洲色图欧美激情| аⅴ资源中文在线天堂| 久久国产精品无码hdav| 国产欧美专区在线观看| 国产自在自线午夜精品视频| 成人字幕网视频在线观看| 狠狠干欧美| 国产精品刺激对白在线| 一级毛片无毒不卡直接观看 | 久久伊人操| 亚洲精品国产精品乱码不卞| 亚洲综合色婷婷中文字幕| 在线无码av一区二区三区| 亚洲av无码片一区二区三区| 成人亚洲视频| 中文字幕久久波多野结衣 | 欧美黑人欧美精品刺激| 四虎永久免费在线| 成人午夜免费观看| 色婷婷在线影院| 伊人成人在线| 亚洲成肉网| 欧美日韩中文国产va另类| 久久精品只有这里有| 麻豆国产在线不卡一区二区| 免费日韩在线视频| 中文字幕中文字字幕码一二区| 色婷婷久久| 国产99热| 中文字幕无码av专区久久| 国产欧美日韩在线在线不卡视频| 久久成人18免费| 一本综合久久| 日韩第九页| 午夜丁香婷婷| 精品国产福利在线| 欧洲一区二区三区无码| 99视频精品在线观看| 日本高清视频在线www色| 久久精品一品道久久精品| 91综合色区亚洲熟妇p| 久久夜色精品国产嚕嚕亚洲av| 国产一级做美女做受视频| av手机版在线播放| 日本一区高清| a级毛片在线免费观看| 亚洲国产91人成在线| 国产亚洲欧美日本一二三本道| 国产精品色婷婷在线观看| 国产成人精品男人的天堂下载| 手机看片1024久久精品你懂的| 日本高清在线看免费观看| 国产美女自慰在线观看| 日韩中文无码av超清| 日本不卡视频在线| 国产靠逼视频| 国产亚洲精品无码专| 日韩天堂网| 亚洲—日韩aV在线| 国产亚洲精品91| 久久美女精品国产精品亚洲| 亚洲国产精品日韩av专区| 亚洲欧洲美色一区二区三区|