摘 要:當(dāng)前計算機網(wǎng)絡(luò)不斷的發(fā)展,伴隨而來的就是計算機網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜化。網(wǎng)絡(luò)安全已經(jīng)擺在我們每個計算機用戶的面前,各計算機用戶都不斷的采用很多網(wǎng)絡(luò)安全的措施,加強網(wǎng)絡(luò)安全防范.但同時,網(wǎng)絡(luò)非法攻擊活動也在不斷地更換各種攻擊方式方法,尋找最薄弱環(huán)節(jié),伺機非法入侵,所以計算機網(wǎng)絡(luò)安全管理就成為了網(wǎng)絡(luò)研究的重點,特別是SQL注入攻擊這種常見的,多發(fā)的網(wǎng)絡(luò)攻擊成為研究當(dāng)下網(wǎng)絡(luò)安全管理的焦點。
關(guān)鍵詞:網(wǎng)絡(luò)安全;SQL注入攻擊;防范get注入;防范post注入;防范cookies注入
中圖分類號:TP393.18
1 SQL注入攻擊相關(guān)概念
1.1 攻擊簡介
SQL注入通常是從萬維網(wǎng)端口開始訪問,一般給我們基本的web訪問沒有太大的差別,因此常規(guī)情況下,防火墻都不會對SQL注入發(fā)出警報,如果用戶沒有查看ⅡS日志的習(xí)慣,極有可能遭受長時間的攻擊都不知道。
1.2 SQL注入攻擊原理
要闡述SQL注入攻擊原理我們以登錄驗證中的模塊為例,說明SQL注入攻擊的實現(xiàn)方法。SQL注入攻擊往往是SQL語法中的一部分,通過執(zhí)行SQL語句而執(zhí)行入侵者的想要的操作。在登陸模塊中,一般有用戶名(username)和密碼(password)兩個參數(shù),其原理是通過查找user表中的用戶名(username)和密碼(password)的結(jié)果來進行授權(quán)訪問,典型的SQL查詢語句為:
Select*from users where username='admin' and password='smith’
假如給username和password賦值“admin'or 1=1--”和“aaa”則SQL腳本解釋器中的程序代碼就變成:
select*from users where username=’admin’ or 1=1—and password=’aaa’
通過上面代碼就可以在輸入?yún)?shù)中構(gòu)建SQL語法,且可以刪除數(shù)據(jù)庫中的表,查詢、插入和更新數(shù)據(jù)庫中的數(shù)據(jù)等危險操作,這就是SQL注入攻擊的主要原理
1.3 入侵操作步驟
(1)找一個類似http://xxx.xxx.xxx/abc.asp?p=YY的網(wǎng)站。
(2)在http://xxx.xxx.xxx/abc.asp?p=YY后面追加“and 1=1”,并訪問該網(wǎng)址即http://xxx.xxx.xxx/abc.asp?p=YY and 1=1應(yīng)該與訪問原地址得到的結(jié)果相同。
(3)在http://xxx.xxx.xxx/abc.asp?p=YY后面追加“and 1=2”,并訪問該網(wǎng)址即
http://xxx.xxx.xxx/abc.asp?p=YY and 1=2應(yīng)該與訪問原地址得到的結(jié)果不同,并提示數(shù)據(jù)庫錯誤。
((2),(3)同時滿足則此網(wǎng)站必定存在SQL漏洞。)
(4)訪問http://xxx.xxx.xxx/abc.asp?p=YY and exists (select*from網(wǎng)站數(shù)據(jù)庫常用表段名)網(wǎng)站數(shù)據(jù)庫常用表段名:admin users administrator等,如果進入的網(wǎng)頁像步驟二一樣,是正常網(wǎng)頁,證明存在該表段名。找尋該SQL數(shù)據(jù)庫使用的表名,進而尋找網(wǎng)站的管理員名、密碼等信息。我們可以通過Socket編程,把常用表段名寫成一個鏈表,通過Socket編程遍歷一邊,并找到可入侵點。
(5)訪問http://xxx.xxx.xxx/abc.asp?p=YY and exists select*from第四步找到的可入侵表名。
2 如何防止SQL注入
2.1 永遠不要信任用戶的輸入
對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和雙\"-\"進行轉(zhuǎn)換等。
在構(gòu)造動態(tài)SQL語句時,一定要使用類安全(type-safe)的參數(shù)加碼機制。大多數(shù)的數(shù)據(jù)API,包括ADO和ADO.NET,有這樣的支持,允許你指定所提供的參數(shù)的確切類型(譬如,字符串,整數(shù),日期等),可以保證這些參數(shù)被恰當(dāng)?shù)豦scaped/encoded了,來避免黑客利用它們。一定要從始到終地使用這些特性。
例如,在ADO.NET里對動態(tài)SQL,你可以像下面這樣重寫上述的語句,使之安全:Dim SSN as String=Request.QueryString(\"SSN\")
Dim cmd As new SqlCommand(\"SELECT au_lname,au_fname FROM authors WHERE au_id =@au_id\")
Dim param=new SqlParameter(\"au_id\",SqlDbType.VarChar)param.Value=SSN
cmd.Parameters.Add(param)
2.2 當(dāng)然已可以通過防范get注入防范post注入
防范cookies注入等措施來防止SQL注入。具體的實現(xiàn)代碼如下:
防范post注入
If Request.QueryString<>””
Then StopInjection(Request.QueryString)
防范post注入
If Request.Form<>””Then StopInjection(Request.Form)
防范cookies 注入
If Request.Cookies<>””Then StopInjection(If Request.Cookies)
2.3 預(yù)防工具
Pangolin(中文譯名為穿山甲)一款幫助滲透測試人員進行Sql注入測試的安全工具,是深圳宇造諾賽科技有限公司(Nosec)旗下的網(wǎng)站安全測試產(chǎn)品之一。通過該軟件就能夠經(jīng)過很簡單的操作,達到最顯著的防范及測試SQL攻擊的效果。
3 結(jié)束語
本文闡述了防止SQL注入攻擊的基本原理和防御方法來管理我們越來越復(fù)雜的計算機網(wǎng)絡(luò)安全,使得繁瑣的網(wǎng)絡(luò)管理變得簡單,安全,可靠,使網(wǎng)絡(luò)管理系統(tǒng)得以高效地運行??傊?,防止SQL注入攻擊經(jīng)過短短的十多年發(fā)展,已給計算機網(wǎng)絡(luò)安全帶來了一些可喜的變化,人們的生活已經(jīng)和網(wǎng)絡(luò)密不可分,隨著網(wǎng)絡(luò)規(guī)模不斷擴大,人們的思想不斷革新,防止SQL注入攻擊技術(shù)會越來越完善,迎來新的發(fā)展和長足的進步。
參考文獻:
[1]林常君.基于web的網(wǎng)絡(luò)設(shè)備管理系統(tǒng)的設(shè)計與實現(xiàn)[J].科技信息,2011(01).
[2]David Zeltserman.SNMPv3與網(wǎng)絡(luò)管理[M].北京:人民郵電出版社,2000.
[3]孟洛明.現(xiàn)代網(wǎng)絡(luò)管理技術(shù)[M].北京:郵電大學(xué)出版社,2000.
[4]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社(第三版).
[5]鐘增勝.注入漏洞的分析及防范[J].重慶工商大學(xué)學(xué)報(自然科學(xué)版).
[6]蔣繼婭,劉彤,王樹威.Web應(yīng)用中的SQL注入攻擊與防護方案研究[J].計算機安全,2008(05).
[7]王功明,吳華瑞,趙春江.正則表達式在電子政務(wù)客戶端校驗中的應(yīng)用[J].計算機工程,2007(09).
[8]周敬利,王曉鋒,余勝生.一種新的反SQL注入策略的研究與實現(xiàn)[J].計算機科學(xué),2006(11).
作者簡介:范科鋒(1975.10-),男,四川納溪人,碩士,助教,研究方向:計算機應(yīng)用。
作者單位:四川化工職業(yè)技術(shù)學(xué)院圖文信息中心,四川瀘州 646005