国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SQL注入攻擊原理及其防范措施

2012-10-30 05:21丁允超范小花
關鍵詞:注入式用戶名攻擊者

丁允超 范小花

(1.重慶正大軟件職業(yè)技術學院,重慶 400056;2.重慶科技學院,重慶 401331)

SQL注入攻擊原理及其防范措施

丁允超1范小花2

(1.重慶正大軟件職業(yè)技術學院,重慶 400056;2.重慶科技學院,重慶 401331)

SQL注入是一種常用且易于實現(xiàn)的入侵手段,是目前中小企業(yè)網(wǎng)站及應用系統(tǒng)最主要的威脅之一。介紹SQL注入攻擊的方式,分析防止SQL注入攻擊的各種措施,給出防止SQL注入的相關程序代碼(用C#語言實現(xiàn))。

SQL注入;安全性;攻擊;ASP.NET

近年來,隨著信息化的普及,各單位和機構(gòu)都構(gòu)建了自己的網(wǎng)站和應用系統(tǒng)。但由于很多軟件開發(fā)人員在實現(xiàn)系統(tǒng)功能的同時,往往忽略了系統(tǒng)的安全性,在系統(tǒng)中留有Bug(漏洞),給系統(tǒng)留下了很大的安全隱患[1]。由于大量的軟件系統(tǒng)都使用了數(shù)據(jù)庫,所以SQL注入攻擊成了眾多攻擊中最常用的且易于實現(xiàn)的入侵手段,是目前中小企業(yè)網(wǎng)站及應用系統(tǒng)最主要的威脅之一。雖然現(xiàn)在的集成化開發(fā)平臺(.NET、JAVA等)本身具備較高的安全性,但如果開發(fā)人員不注意,也有可能留下安全隱患。所以我們有必要深入了解SQL注入攻擊的原理及其實現(xiàn)過程。本文介紹了SQL注入攻擊的方式,重點分析防止SQL注入攻擊的各種措施,給出了防止SQL注入的相關程序代碼(用C#語言實現(xiàn))。

1 SQL注入攻擊原理

“SQL注入”是一種源于SQL語句的漏洞,它是利用程序?qū)斎霐?shù)據(jù)的檢驗不足或程序自身對變量處理不當,把想要執(zhí)行的SQL語句插入到實際的SQL語句中發(fā)送到服務器去執(zhí)行,但是執(zhí)行過程不是按照軟件開發(fā)人員的預期方式進行的。其后果輕則導致敏感信息的泄露,重則會導致整個服務器受攻擊者的控制[2]。

在ASP.NET中的“SQL注入”主要是用戶在網(wǎng)頁上的各種文本輸入框內(nèi)輸入一定的SQL語句代碼,將其傳遞到應用程序,致使客戶端的數(shù)據(jù)顯示或者執(zhí)行結(jié)果不是軟件開發(fā)人員的預期效果[3]。這樣攻擊者就可以有目的的查看網(wǎng)站的一些內(nèi)部信息及各種業(yè)務數(shù)據(jù),從而造成大量有用數(shù)據(jù)的泄露。

下面舉幾個常見的“SQL注入”攻擊的實例。

(1)用戶登錄

一般用戶在進入系統(tǒng)和網(wǎng)站之前,系統(tǒng)和網(wǎng)站的后臺都會對用戶進行合法性驗證,驗證方式如圖1所示。

圖1 用戶登錄

假設后臺驗證用戶名和密碼的SQL語句為“select* from [usres] where username='” +txtUserName.Text+“'and password='” +txtPwd.Text+“'”,當我們正常輸入圖1所示的用戶名(“admin”)和密碼(“123456”)時,SQL 語句即為“select*from[usres]where username='admin'and password='123456'”,當用戶表(users)中的用戶數(shù)據(jù)如圖2所示時,此時用戶登錄成功,如果用戶名或者密碼錯誤,則用戶登錄失敗,這是軟件開發(fā)者的預期效果。

圖2 用戶表數(shù)據(jù)

但是,如果客戶輸入的資料如圖3所示,即用戶名文本框輸入的內(nèi)容為“'or 1=1or'1'='1”,密碼為任意值時,后臺SQL語句就變成了 “select*from[users] where username=''or 1=1or'1'='1'and password='xxxx'”①,此時不管輸入任何密碼,此SQL語句都會查詢出用戶資料,因為“or 1=1”語句永遠為“真(True)”。但是系統(tǒng)數(shù)據(jù)庫中并不存在名為“'or 1=1or'1'='1”的用戶,此時,就形成了“SQL 注入”攻擊。即“客戶”在沒有合法用戶名和密碼的情況下,仍然可以進入我們的系統(tǒng),這就造成很大的安全隱患。

圖3 特殊用戶名

登錄功能函數(shù)代碼如下:

(2)網(wǎng)站(系統(tǒng))數(shù)據(jù)查詢

我們在系統(tǒng)或者網(wǎng)站中,有如圖4所示的搜索功能,假設我們后臺的SQL語句為"select*from news where title like'%"+txtKeyWord.Text+"%'";當按照圖4輸入關鍵字“注膠蝦”,點擊搜索按鈕時,搜索結(jié)果如圖5所示。此時的SQL語句為“select*from news where title like'%注膠蝦%'”。

圖4 正常搜索

圖5 正常搜索結(jié)果

當我們輸入關鍵字 “注膠蝦%'or title like'%”時,搜索結(jié)果為所有的數(shù)據(jù)(圖6)。因為此時的SQL語句已變?yōu)椤皊elect*from news where title like'%注膠蝦%'or title like'%%'”。

圖6 注入搜索結(jié)果

搜索功能實現(xiàn)代碼:

對比這兩次查詢結(jié)果可知,第二次查詢完全不是軟件開發(fā)人員的預期效果,這樣就又構(gòu)成了一次“SQL注入”攻擊,雖然這種方式的攻擊,需要攻擊者對數(shù)據(jù)表的字段很了解,但這對于有經(jīng)驗的攻擊者而言,不是難事。并且通過修改相應的SQL語句,又可以實現(xiàn)不同的注入式查詢,從而實現(xiàn)更加復雜的“注入式”攻擊。

2 SQL注入攻擊防范措施

由于“SQL注入”攻擊使用的是合法的SQL語句,所以只要是有數(shù)據(jù)庫的場合,該注入式攻擊方式都適用,而如今,大部分的網(wǎng)站和Web應用系統(tǒng)都使用了數(shù)據(jù)庫技術,所以目前很多的系統(tǒng)都存在被注入攻擊的風險和安全隱患。因此,為了減少系統(tǒng)被攻擊的可能性,應采取必要的應對措施:

(1)替換或者屏蔽特殊字符(字符串),比如 or、and、%、like等信息,這樣可以從一定程度上降低被攻擊的概率,由于更高級的攻擊者依然不會輕易放棄,會竭力尋找過濾的漏洞,繼續(xù)實施攻擊。

(2)通過設置文本框的長度屬性(MaxLength),限制用戶名、密碼等輸入字符串的長度,這樣在一定程度上可降低被攻擊的可能性[5]。

(3)通過設置IIS屏蔽系統(tǒng)的出錯信息,阻止攻擊者獲取系統(tǒng)的出錯結(jié)果,使其不能繼續(xù)實施更進一步的攻擊[5]。

(4)將用戶名和密碼加密后再進行存儲,也是一種防止攻擊的方法。

(5)在ASP.NET下,有一種特有的防止SQL注入攻擊的方式,就是用傳參數(shù)的方式替代普通字符串拼接SQL語句的方式,從根本上避免SQL注入式攻擊的發(fā)生。下面用代碼(ASP.NET(C#語言)代碼)的形式來說明避免SQL注入式攻擊的實現(xiàn)方式。

上文提出了很多解決SQL注入式攻擊的方法,現(xiàn)以“用戶登錄”功能,結(jié)合ASP.NET特有的傳遞參數(shù)的方式,用代碼的形式舉例說明。

由于傳統(tǒng)的拼接字符串的方式,給攻擊者留下了很多可攻擊的漏洞,我們改用ASP.NET傳遞參數(shù)的方式,具體實現(xiàn)代碼如下:

代碼分析:

(1)該函數(shù)代碼沒有使用字符串拼接的方式;

(2)指定了兩個參數(shù)的數(shù)據(jù)類型,這里均為SqlDbType.VarChar類型;

(3)在指定了參數(shù)的數(shù)據(jù)類型后,又指定了相應參數(shù)的長度,這樣可以避免攻擊者惡意輸入任意長度的參數(shù)進行攻擊;

(4)當調(diào)用該代碼進行用戶名和密碼驗證時,使用Sql Server Profiler工具進行實時監(jiān)測。若按照拼接字符串方式進行“SQL注入”攻擊,當輸入用戶名“'or 1=1or'1'='1” 和任意密碼時,Sql Server Profiler監(jiān)測到的實際執(zhí)行語句為

“exec sp_executesql N'select count(*)from users whereusername= @usernameand password =@password',N'@username varchar (20),@password varchar(20)',@username='12312312312''or 1=1',@password='123123'”。可以看出,在使用參數(shù)集合傳入輸入值時,數(shù)據(jù)將被作為非結(jié)構(gòu)化的數(shù)據(jù)發(fā)送到數(shù)據(jù)庫,而沒有像先前①以整個字符串的方式進行運行,這樣可以實現(xiàn)安全的SQL語句查詢功能,有效的避免了“SQL注入”攻擊。

3 結(jié) 語

本文從SQL注入的基本原理入手,用兩個典型的案例說明了注入攻擊的方式。SQL注入是由于編碼人員的疏漏所造成的,因此必須加強編碼人員的安全意識,才能防范SQL注入攻擊。本文的所有代碼均在以下環(huán)境調(diào)試通過:winxp、IIS6.0、SQL2008、Visual Studio2010。

研究“SQL注入”攻擊并不是為了去攻擊別人的系統(tǒng),而是使自己的系統(tǒng)更加安全。因為攻擊和防御是相輔相成的,相信在了解了“SQL注入”攻擊的原理和防范措施后,無論是在軟件開發(fā)還是在系統(tǒng)維護方面,都能夠很大程度地提高系統(tǒng)的安全性。

[1]鐘志東,趙中文.ASP.NET4(C#)項目開發(fā)教程-面向工作過程[M].北京:北京航空航天大學出版社,2011.

[2]黃曉華.ASP.NET網(wǎng)站防SQL注入的方法研究[J].電腦知識與技術,2011(29):30-32.

[3]孫俊德.SQL注入攻擊與防范技術[J].職業(yè)技術,2011(8):19-21.

[4]鐘增勝.SQL注入漏洞的分析及防范[J].重慶工商大學學報:自然科學版,2005(12):593-597.

[5]張勇,李力,薛倩.Web環(huán)境下的SQL注入式攻擊的監(jiān)測與防御[J].現(xiàn)代電子技術,2004(15):103-108.

The Principle of SQL Injection Attack and Analysis of Countermeasures

DING Yunchao1FAN Xiaohua2
(1.Zhengda Software Polytechnic of Chongqing,Chongqing 400056;2.Chongqing University of Science and Technology,Chongqing 401331)

SQL injection is a kind of popular and easy to realize intrusion means,and it is one of the main threats to the small and medium enterprise website and application system.This paper introduces the methods of SQL injection attack,especially,summarizes and analyses various measures to prevent SQL injection attacks,and gives the related program code to prevent SQL injection attacks(Realize by C#language).

SQL injection;security;attack;ASP.NET

TP311

B

1673-1980(2012)05-0136-04

2012-04-24

國家自然科學基金項目(11076030)

丁允超(1980-),男,重慶正大軟件職業(yè)技術學院教師,研究方向為數(shù)據(jù)安全、軟件工程。

猜你喜歡
注入式用戶名攻擊者
《護士進修雜志》投稿程序
機動能力受限的目標-攻擊-防御定性微分對策
《護士進修雜志》投稿程序
《護士進修雜志》投稿程序
GE發(fā)電機轉(zhuǎn)子接地保護的原理
高中化學教學模式的探討與學習
正面迎接批判
機智的快遞員
紅外導引頭注入式閉環(huán)試驗的邊界能力及一致性
有限次重復博弈下的網(wǎng)絡攻擊行為研究