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

基于WEB應用程序的SQL注入防范研究

2011-08-15 00:49:59郝保水
大眾科技 2011年4期
關鍵詞:計算機數據庫用戶

岳 清 郝保水

(北京信息科技大學計算機學院,北京 100101)

基于WEB應用程序的SQL注入防范研究

岳 清 郝保水

(北京信息科技大學計算機學院,北京 100101)

隨著網絡的普及,越來越多的應用系統采用了B/S模式,介紹了SQL注入攻擊的原理以及對Web服務器帶來的危害,并結合Web應用程序開發給出了若干防范方法,以供開發Web程序和架設服務器時參考。

SQL注入;正則表達式;存儲過程;PreparedStatement;正則表達式

(一)引言

隨著互聯網的發展,越來越多的系統采用基于Web服務的方式,針對Web業務的攻擊亦在迅猛增長。常見的Web攻擊可分為三類:一是利用WEB 服務器的漏洞進行攻擊,如CGI、緩沖區溢出;二是利用網頁自身的安全漏洞進行攻擊,如SQL注入、Cookie假冒、認證逃避、非法輸入、強制訪問、隱藏變量篡改等;三是利用僵尸網絡的分布式DOS攻擊,造成網站拒絕服務。在這些安全隱患中,兩種攻擊手段概率最高,它們分別是“跨站點腳本攻擊”和“SQL注入攻擊”。2008年,特別是與金融服務和在線零售業相關的網站受到的SQL 注入攻擊數量明顯上升,根據網絡安全公司WebCohort關于網絡應用程序調查研究報告顯示,有可能受到黑客攻擊的網絡應用程序不少于92%,其中,有60%就有可能遭受SQL 注入攻擊。本文將通過對SQL注入原理的分析來闡述防范SQL注入的方法。

(二)SQL注入原理

1.SQL注入原理

對SQL注入攻擊目前還沒有一種標準的定義,微軟技術中心從兩個方面進行了描述:(1)是一種腳本注入式的攻擊;(2)惡意用戶輸入用來影響被執行的SQL腳本。WEB 應用一般是用客戶輸入數據來構造SQL 查詢語句,如果程序編寫時,沒有對用戶輸入數據的合法性進行判斷,用戶就可以利用某些提交數據頁面或修改數據頁面里的漏洞,精心構造SQL語句,讓系統執行此類特殊的SQL指令,從而獲取一些敏感信息,甚至獲取主機控制權限。 SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問沒什么區別,所以目前市面的防火墻都不會對SQL注入發出警報,如果管理員沒查看IIS日志的習慣,可能被入侵很長時間都不會發覺。

例如,在Web應用程序的登錄頁面中,允許用戶輸入其用戶名(userID)和密碼(psd)兩個參數,應用程序通過user表中進行登錄身份驗證。假設登錄用戶名為:“mike”,密碼為:“mike1980”。則常用的身份驗證語句就變為:

select * from users where userID='mike' and psd='mike1980',正常情況下,如果上述sql查詢返回一條用戶記錄,則說明身份驗證成功;反之,則說明身份驗證失敗。如果分別為userID和psd 兩個參數賦值:“'abc' or 1=1—”和“abc”,則上述SQL 語句就會變為:

select * from users where userID = 'mike' or 1=1--and psd ='abc'顯然在該語句的兩個判斷條件中,其中有一個恒為真,即1=1,因此身份驗證就會成功。可見攻擊者在不知道有效的用戶名和密碼的情況下就可以通過身份驗證。這就是一種最簡單的SQL注入。可以看出SQL注入的原理就是將SQL命令通過“嵌入”的方式放入合法的HTTP提交請求中,從而進行非授權或非法的操作。當應用程序使用輸入內容來構造動態sql語句以訪問數據庫時,會發生SQL注入攻擊。

2.SQL注入過程:

SQL注入主要的步驟如下:

(1)發現SQL注入位置;

通過對帶有參數的動態網頁地址后附件信息,比較運行結果,判斷該Web應用程序是否可以被注入。

(2)判斷后臺數據庫類型;

可以根據SQL注入不成功的提示信息,分析數據庫的類型。 因此要特別注意,編寫程序的時候,要盡量考慮所有可能出現的錯誤并編寫錯誤提示,要避免系統提示。

(3)確定XP_CMDSHELL可執行情況;

若當前連接數據的帳號具有SA權限,且master.dbo.xp_cmdshell擴展存儲過程(調用此存儲過程可以直接使用操作系統的shell)能夠正確執行,則整個計算機可以通過以下幾種方法完全控制,以后的所有步驟都可以省去。

(4)發現WEB虛擬目錄;

只有找到WEB虛擬目錄,才能確定放置ASP木馬的位置。

(5)上傳ASP木馬;

(6)得到管理員權限。

3.SQL注入后果

SQL注入成功后,造成的危害也很嚴重:

(1)Web服務器數據庫信息會被竊取。一旦攻擊者通過了SQL注入,可以通過訪問系統數據庫master的系統表sysdatabases,猜解出所有的數據庫名,再通過對每個庫的系統表Sysobjects的訪問,可以猜解出該庫的所有對象的對象名、對象ID、對象類型、所有者對象的用戶ID、對象狀態。接下來就可以查看每個對象了,信息就這樣被竊取了。

(2)Web服務器數據庫對象受損。SQL注入成功后可在Web服務器執行SQL命令,如delete、insert等。如果刪除了表或者庫,那么 Web應用程序的訪問必然會出錯。動態生成網頁的數據庫被通過 SQL注入的方式刪除了,網頁無法生成。這就是常見的網站被“黑”的原因之一。

(3)計算機受控。通過注入,上傳木馬,這是危害最大的一種方式,SQL注入后,若當前連接數據的帳號具有SA權限,且可執行 master.dbo.xp_cmdshell擴展存儲過程,用xp_cmdshell 向服務器上寫入一個能寫文件的 asp文件,通過該方法即可上傳木馬,被攻擊的計算機就處于被控制狀態了。

(三)SQL注入防范方法

在了解了SQL注入的原理、過程和后果之后,接下來將闡述SQL注入防范方法。在Web項目中合理使用防范SQL注入方法是Web項目設計和開發者必須要考慮的問題。

1.使用函數過濾字符串

目標是過濾輸入中能夠引起SQL注入的字符或單詞。以下的例子是將字符串過濾功能封裝在一個名為sql_inj.java的文件中,在jsp中可以調用該函數檢查是否包含非法字符。public static boolean sql_inj(String str)

{

String inj_str =

"'|and|exec|insert|select|delete|update|count|*|%|ch r|mid|master|truncate|char|declare|;|or|-|+|,";//可以在這添加要過濾的內容

String inj_stra[]= split(inj_str,"|");

for (int i=0 ; i < inj_stra.length ; i++ )

{

if (str.indexOf(inj_stra[i])>=0)

{

return true;

}

}

return false;

}

2.使用正則表達式過濾傳入的參數

正則表達式,在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索和/或替換那些符合某個模式的文本內容。可以使用正則表達式對輸入項進行檢查。

下面是具體的正則表達式:

(1)檢測SQL meta-characters的正則表達式:

/(\%27)|(’)|(--)|(\%23)|(#)/ix

(2)修正檢測SQL meta-characters的正則表達式:

/((\%3D)|(=))[^ ]*((\%27)|(’)|(--)|(\%3B)|(:))/i

(3)典型的 SQL 注入攻擊的正則表達式:

/w*((\%27)|(’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

(4)檢測SQL注入,UNION查詢關鍵字的正則表達式:

/((\%27)|(’))union/ix(\%27)|(’)

(5)檢測MS SQL Server SQL注入攻擊的正則表達式:

/exec(s|+)+(s|x)pw+/ix

3.簡單又有效的方法PreparedStatement

SQL注入的原因就是將SQL命令通過“嵌入”的方式放入合法的HTTP提交請求中。如果使用預編譯語句,傳入的任何內容就不會和原來的語句發生任何匹配的關系,就用不著對傳入的數據做任何過慮。這就是在JDBC應用中,應該始終以PreparedStatement代替Statement的原因。也就是說,在任何時候都不要使用Statement.,凡涉及到執行的SQL中有變量時,用JDBC(或者其他數據持久層)提供的如:PreparedStatement就可以 。PreparedStatement的優點如下:

(1)代碼的可讀性和可維護性。

(2)PreparedStatement盡最大可能提高性能。

(3)最重要的一點是極大地提高了安全性。以下是一段關于PreparedStatement的代碼:

try {

String username =

httpservletrequest.getParameter("username");

String password =

httpservletrequest.getParameter("password");

String sql = "SELECT * FROM users where username=?and password=?";

Connection conn =

ConnectionManager.getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setString(1,username);

pstmt.setString(2,password);

ResultSet resultset = pstmt.executeQuery();

} catch (SQLException e) {

e.printStackTrace();

}

運行結果是只要輸入特殊的符號都會以(/? )的形式出現,因此 SQL肯定是不會通過的。所以這樣可以簡單又有效的防止SQL的注入。

4.SQL Server 防御

輸入驗證不是萬能的,比如用過濾字符串的方法拒絕了“delete”字符串的輸入,但攻擊者只需要把該字符串改寫成“DeLetE”等形式就可以避開輸入驗證,并能正常執行該SQL語句。所以更重要的一點是必須考慮SQL Server 自身安全性問題。在創建數據庫構架時應該考慮以下問題:

(1)數據庫賬號的管理:創建低權限賬號;刪除冗余的賬號;保持賬號密碼的高安全性,并正常運行一個密碼審計腳本。

(2)數據庫角色的管理

確保需要使用Web 應用的SQL 用戶具有最低訪問權限。

(3))檢查服務器的補丁狀況

針對SQL-Server 的漏洞,及時升級安全補丁。

(4)檢驗IIS 日志和數據表。

(四)結語

本文對SQL 注入攻擊的原理、常用注入過程和后果進行了描述和總結,并著重闡述了通過字符串過濾、使用正則表達式、預編譯方法和SQL Server 防御來構建防范SQL注入的思路和方法,并給出了相應代碼。本文對于越來越多的Web 動態應用程序提供了較好的防范SQL 注入式攻擊的解決方案,具有一定的現實意義。

[1]秦浩.淺析常見的 Web服務攻擊[J].自動化與儀器儀表,2009,(3).

[2]賽門鐵克第 2 期.Symantec 資訊[EB/OL].http://www.cww.net.cn/zhuanti/html/2009/2/10/200921095084992.htm.

[3]Anley C.Advanced SQL injection in SQL server Applications[EB/OL].http://www.creangel.com/papers/adva nced_sql_injection.pdf, An NGSSoftware Insight Security Research (NISR)Publication,2002.

[4]郭立川.SQL 注入思路與防注入辦法[J].軟件導論,2010,(3).

[5]王云,郭外萍,陳承歡.Web 項目中的SQL 注入問題研究與防范方法[J].計算機工程與設計,2010,31(5).

TP393.08

A

1008-1151(2011)04-0048-02

2011-01-11

北京市教委科技發展計劃基金項目(KM200810772010);2010年度科研水平提高項目資助(資助號:5028123400

岳清(1973-),女,河南鄭州人,北京信息科技大學計算機學院講師,碩士,從事數據庫安全、軟件工程等研究。

猜你喜歡
計算機數據庫用戶
計算機操作系統
基于計算機自然語言處理的機器翻譯技術應用與簡介
科技傳播(2019年22期)2020-01-14 03:06:34
信息系統審計中計算機審計的應用
消費導刊(2017年20期)2018-01-03 06:26:40
數據庫
財經(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
主站蜘蛛池模板: 九色91在线视频| yjizz视频最新网站在线| 国产靠逼视频| 噜噜噜久久| 国产在线日本| 国产性猛交XXXX免费看| 久久综合色天堂av| 四虎影视无码永久免费观看| 色婷婷亚洲十月十月色天| 狠狠色丁香婷婷| 欧美亚洲国产精品第一页| 色综合国产| 69视频国产| 国产精品久久自在自线观看| 久久99精品久久久久久不卡| 亚洲天堂精品在线观看| 午夜啪啪网| 欧美第一页在线| 美女无遮挡拍拍拍免费视频| 国产素人在线| 日本午夜视频在线观看| 2018日日摸夜夜添狠狠躁| 91毛片网| 亚洲A∨无码精品午夜在线观看| 亚洲区视频在线观看| 免费激情网址| 国产精品永久不卡免费视频| 亚洲国产精品日韩av专区| 永久免费av网站可以直接看的| 国产一级毛片yw| 天天爽免费视频| 日本欧美视频在线观看| a在线亚洲男人的天堂试看| 亚洲欧美精品日韩欧美| 亚洲女人在线| 久久人人97超碰人人澡爱香蕉| 东京热一区二区三区无码视频| www.av男人.com| 九九热这里只有国产精品| 亚洲一级色| 欧美国产在线看| 成人无码区免费视频网站蜜臀| 69精品在线观看| 亚洲精品无码高潮喷水A| 国产真实二区一区在线亚洲| 亚洲成人黄色网址| 日本不卡在线播放| 91视频区| 欧美成人免费一区在线播放| 2022精品国偷自产免费观看| 女人18毛片一级毛片在线 | 欧美一区日韩一区中文字幕页| 国产精品性| 日韩高清欧美| 最新亚洲人成网站在线观看| 谁有在线观看日韩亚洲最新视频| 欧美成人怡春院在线激情| 国产女人综合久久精品视| a级毛片免费网站| 久久a毛片| 欧美日韩一区二区三区四区在线观看 | 亚洲国产精品一区二区高清无码久久 | 男人天堂亚洲天堂| 亚洲精品色AV无码看| 欧美另类精品一区二区三区| 日本午夜精品一本在线观看| 久热中文字幕在线观看| 99久久精品无码专区免费| 国产成人久久777777| 国产精品成人观看视频国产| 成年人久久黄色网站| 欧美黄网在线| 在线观看的黄网| 久久婷婷人人澡人人爱91| 久久精品欧美一区二区| 亚洲色成人www在线观看| 国产香蕉一区二区在线网站| 毛片一区二区在线看| 91小视频版在线观看www| 久热re国产手机在线观看| 制服丝袜 91视频| 国内a级毛片|