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
主站蜘蛛池模板: 亚洲成人一区在线| 女人18一级毛片免费观看| 色悠久久久久久久综合网伊人| 国产成人乱无码视频| 国产精品爽爽va在线无码观看 | 91小视频在线观看| 无码AV日韩一二三区| 99精品高清在线播放| 91成人在线免费视频| 亚洲天堂成人在线观看| 国产69精品久久久久孕妇大杂乱 | 91国内外精品自在线播放| 亚洲天堂区| 波多野结衣一区二区三区AV| 福利片91| 国产精品亚洲а∨天堂免下载| 成人一级黄色毛片| 欧美亚洲欧美| 亚洲成人免费看| 亚洲中文字幕久久精品无码一区| 国产精品香蕉在线观看不卡| 日本成人一区| 精品一区二区三区视频免费观看| 日日拍夜夜嗷嗷叫国产| 久久国产精品电影| 91无码国产视频| 亚欧美国产综合| 亚洲国产综合第一精品小说| 91网站国产| 一本视频精品中文字幕| 免费人成视频在线观看网站| 天堂av综合网| 好吊妞欧美视频免费| 东京热av无码电影一区二区| 亚洲色图综合在线| 国产99视频在线| 亚洲精品桃花岛av在线| 99热国产这里只有精品无卡顿"| 91久草视频| 欧美日本在线一区二区三区| 日韩无码白| 久久精品无码国产一区二区三区 | 欧美激情首页| 国产午夜小视频| 国产一区二区影院| 久久精品国产91久久综合麻豆自制| 中文字幕在线观| 婷婷激情五月网| 波多野结衣中文字幕一区二区| 中文字幕欧美成人免费| 精品福利国产| 欧美不卡二区| 亚洲高清日韩heyzo| 久久精品国产电影| 亚洲男人在线天堂| 国内精品视频| 国产精品三区四区| 国产精品女在线观看| 草草线在成年免费视频2| 亚洲人成网站色7799在线播放| 欧美97欧美综合色伦图| 日韩在线中文| 午夜福利视频一区| 精品1区2区3区| 国产精品吹潮在线观看中文| 国内a级毛片| 国产女人在线观看| AV天堂资源福利在线观看| 福利国产在线| 欧美综合激情| 五月综合色婷婷| 中文纯内无码H| 国产剧情无码视频在线观看| 国产亚洲欧美在线人成aaaa| 老司机精品一区在线视频| 日韩精品成人网页视频在线| 日韩黄色精品| 国产手机在线小视频免费观看| 亚洲色图在线观看| 国产精品久久久久无码网站| 国产Av无码精品色午夜| 一区二区自拍|