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

基于.NET的信息系統SQL注入防御研究*

2010-08-15 00:45:03葛昕楊小東岳敏楠
中國教育信息化 2010年13期
關鍵詞:數據庫系統

葛昕,楊小東,岳敏楠

(1.上海理工大學網絡中心,上海200093;2.上海理工大學研究生部,上海200093)

基于.NET的信息系統SQL注入防御研究*

葛昕1,楊小東2,岳敏楠1

(1.上海理工大學網絡中心,上海200093;2.上海理工大學研究生部,上海200093)

使用.NET開發信息系統是近年來高校廣泛采用的一種形式,因此針對它的攻擊也日益增多,其中最為嚴重的SQL注入攻擊,可以徹底摧毀數據庫,并給攻擊者打開登錄系統的后門。本文以上海理工大學研究生信息系統和Web網站為研究樣本,分析了流行的注入攻擊代碼,給出了修復此攻擊的方法,并設計了一套行之有效的SQL注入防御系統,此方法在實際應用中得到了證明。

.NET;SQL注入;存儲過程;信息系統

一、前言

隨著網絡基礎建設日趨成熟,信息系統的應用也越來越廣泛,而同時產生的問題就是網絡攻擊的不斷出現。在眾多的攻擊手段中,SQL注入式攻擊是較易掌握并容易獲得成功的一種攻擊方式,特別是一些自動化的SQL注入工具的出現,如NBSI2、DOMAIN3等,更是使得許多動態站點成為SQL攻擊下的犧牲品。而造成這種情況的一個主要原因就是程序員在編寫程序時沒有對用戶提交數據的合法性進行驗證,從而使得程序存在隱患。SQL注入是從正常的WWW端口訪問,表面看起來跟一般的Web頁面訪問沒什么區別,這類攻擊屬于應用層攻擊,所以以往的基于包過濾法、基于狀態檢測法等完全無效。要解決SQL注入攻擊問題,就必須在應用層進行充分的防范來確保系統的安全。上海理工大學研究生部的多個應用系統都采用了.NET+SQL作為開發環境,本文就是以此為平臺進行研究。

二、SQL注入攻擊代碼分析

SQL注入攻擊的具體過程為:發現SQL注入位置;判斷后臺數據庫類型;確定XP_CMDSHELL可執行情況;發現Web虛擬目錄;上傳ASPX木馬;得到管理員權限。[1]發現SQL注入位置是整個攻擊的源頭,攻擊者將某些經過精心構造的特殊的SQL字符串插入到Web表單的輸入域,欺騙服務器執行惡意的SQL命令,即可判斷出是否存在注入點。[2]SQL注入的手法相當靈活,在注入時通過構造巧妙的SQL語句,可以使系統錯誤地授權給攻擊者,幫助其成功獲取想要的數據,或者修改數據,進而在網站進行掛馬操作。以下是近來最為流行的注入攻擊的存儲過程,其結果可以將數據庫中多數類似varchar字段的內容修改為木馬地址來進行系統掛馬。

DECLARE@T varchar(255),@C varchar(255)

DECLARE Table_Cursor CURSOR FOR//定義游標

SELECTa.name,b.nameFROM sysobjectsa,syscolumnsb

WHERE a.id=b.id AND a.xtype=′u′AND(b.xtype =99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) //當表字段類型為ntext、text、xtype、nvarchar、varchar時

OPENTable_CursorFETCHNEXTFROM Table_Cursor INTO@T,@C

WHILE(@@FETCH_STATUS=0)

BEGIN

EXEC(′update[′+@T+′]set[′+@C+′]=rtrim (convert(varchar,[′+@C+′]))+′′<script src=http://掛馬網站地址/1.js></script>′′′)//將字段內容修改為掛馬網站地址

FETCH NEXT FROM Table_Cursor INTO@T,@C

END

CLOSE Table_Cursor DEALLOCATE Table_Cursor

這種方式利用系統代碼中存在的漏洞進行注入,先遍歷數據庫中某些特定字段類型,將記錄中該字段插入含有js文件的惡意script標簽,即木馬的地址。雖然這些js文件的內容不同,但是他們都嘗試利用已經被修復的Microsoft產品的漏洞或者第三方ActiveX控件的漏洞。由于這些腳本被單獨存儲,因此很容易被更新以利用客戶端更新的漏洞,也更容易按照不同瀏覽器來定制。對于這種破壞,我們只要采用類似注入攻擊的方法將注入代碼中間部分替換為如下代碼,運行后即可將數據庫中的惡意代碼刪除。

DECLARE@str varchar(500)//聲明要替換的字符

set@str=′<script src=http://掛馬網站地址/1.js></ script>′//這里是你要替換的字符

OPEN Table_Cursor FETCH NEXT FROM Table_ Cursor INTO@T,@C

WHILE(@@FETCH_STATUS=0)

BEGIN

EXEC(′update[′+@T+′]set[′+@C+′]=replace (cast([′+@C+′]as varchar(8000)),′′′+@str+′′′,′′′′)′) //清除記錄內容中含有的木馬地址

FETCH NEXT FROM Table_Cursor INTO@T,@C

END

三、SQL注入防御系統

為了能夠主動地防御SQL注入攻擊,我們可以將所有傳入的SQL參數全部使用存儲過程來實現,但對于一些已經在使用的系統顯然不現實,而且使用分頁存儲時如果進行拼接字串來替換危險字符仍會有漏洞。為了保護原有代碼不做修改,可以采用另一種方法,對傳入參數進行過濾。本文設計了一個綜合防御系統,包括三個部分:檢測模塊、過濾模塊和記錄模塊。檢測模塊用于檢測系統數據庫是否已受注入破壞,過濾模塊對所有要傳入的參數做SQL關鍵字符過濾,日志模塊用于對嘗試注入的攻擊進行日志記錄,幫助管理員進行日常安全性分析與維護。對于所有使用.NET+SQL構造的信息系統,只要將過濾模塊加載在所有要使用數據庫系統的頁面中即可實現對SQL注入的防御。以下只列出最為核心的過濾模塊和日志模塊中的關鍵代碼。

//判斷用戶請求字符是否含有SQL注入攻擊字符

private bool ProcessSqlStr(string Str)//Str為用戶提交數據

{bool ReturnValue=true;

try{if(Str.Trim()!="")

{string SqlStr="and|exec|insert|select |delete|update|count|*|chr|mid|master|truncate|char| declare";//用戶可自行定義過濾參數

string[]anySqlStr=SqlStr.Split(′|′);

foreach(string ss in anySqlStr)

{if(Str.ToLower().IndexOf(ss)>=0)

{ReturnValue=false;

break;}

}

}

}

catch{ReturnValue=false;}

return ReturnValue;

}

在服務器上建立一個文件夾AttackLog,創建日志文件log.aspx用于存放每天SQL攻擊操作產生的日志。以下為記錄日志部分核心代碼。

public partial class ErrorLog_Log:System.Web.UI.Page

{

protected void Page_Load(objectsender,EventArgse)

{

Log(HttpUtility.UrlDecode(Request["PreUrl"]));

}

private void Log(string url)

{

DateTime dt=DateTime.Now;

string fileName=Server.MapPath("/AttackLog") +"\Log"+dt.ToString("yyyy_MM_dd")+".log";

string content=dt.ToString()+","+Request. UserHostAddress+","+url+" ";

File.AppendAllText(fileName,content);

//Response.Redirect("/errorPage.htm l");

}

}

四、對于.NET信息系統的安全建議

對于.NET開發的信息系統,被攻擊的根本原因還是程序編碼有漏洞,故在編寫程序時,可以參考以下建議,加強程序代碼的安全性。

第一,在構造動態SQL語句時,使用類安全的參數代碼機制。

第二,限制表單或查詢字符串輸入的長度,這可以很大程度上增加攻擊者在SQL命令中插入有害代碼的難度。

第三,檢查用戶輸入的合法性,確信輸入的內容只包含合法的數據。為了彌補客戶端驗證機制脆弱的安全性,數據檢查在服務器端也需要執行。

第四,在部署應用前,對所有的編碼做安全審評。不把敏感數據在數據庫里以明文存放。敏感數據應該在單向加密過后再存放。將用戶輸入的數據加密后,再與數據庫中保存的數據比較,相當于對用戶輸入的數據進行了“消毒”處理,用戶輸入的數據不再對數據庫有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。

第五,檢查提取數據的查詢所返回的記錄數量。如果程序只要求返回一個記錄,但實際返回的記錄卻超過一行,那就當作出錯處理。

第六,只給訪問數據庫的Web應用功能所需的最低權限。

五、小結

本文分析了流行的SQL注入方法及恢復手段。設計了一個簡單有效的防御系統,可對常見SQL注入進行阻斷,其日志功能在記錄攻擊數據形式的同時為我們進一步完善系統指出了方向。系統采用頁面調用形式,可移植性強、部署簡單,并可自定義過濾參數。上海理工大學研究生部采用.NET+SQL Server開發了多個信息應用系統,從Web站點到綜合教務管理系統在前期都不斷受到各種SQL注入攻擊的考驗。在部署了本防御系統后,經過長期運行,在各個應用系統上都起到了很好的攔截效果,為保證信息系統的穩定運行提供了可靠的保障。☉

[1]張洪星,褚建立.基于ASP.NET的SQL注入攻擊及防范解決方案[J].電腦知識與技術,2006(35).

[2]戴詩發.校園網SQL注入攻擊與防范技術研究[J].昆明理工大學學報,2005.Vol.30(3).

(編輯:隗爽)

book=11,ebook=16

TP309.2

A

1673-8454(2010)13-0011-03

*本文受上海市研究生教育創新計劃資助,項目編號:SLCXPY1001。

猜你喜歡
數據庫系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
主站蜘蛛池模板: 在线视频亚洲色图| 亚亚洲乱码一二三四区| 2021国产乱人伦在线播放| 欧美成人精品高清在线下载| 大香网伊人久久综合网2020| 国产在线自在拍91精品黑人| 中文字幕资源站| 毛片一区二区在线看| 露脸一二三区国语对白| 欧美伦理一区| 99资源在线| 亚洲性一区| 久久公开视频| 在线国产91| 亚洲午夜天堂| 2048国产精品原创综合在线| 国产91丝袜| 日韩黄色在线| 亚洲V日韩V无码一区二区| 国精品91人妻无码一区二区三区| 久久亚洲国产视频| 欧美色图第一页| 国产高清在线精品一区二区三区 | 国产成人在线无码免费视频| 久久黄色小视频| 99久久这里只精品麻豆| 亚洲性网站| 日韩小视频在线播放| 欧美成人一级| 欧美在线视频不卡第一页| 日韩欧美网址| 四虎成人免费毛片| 免费A级毛片无码无遮挡| 伊人蕉久影院| 国产91av在线| 国产激爽大片在线播放| 日韩免费中文字幕| 天天爽免费视频| 就去吻亚洲精品国产欧美| 中文字幕1区2区| 久久香蕉国产线看精品| 亚洲欧美不卡中文字幕| 久久国产精品77777| 波多野结衣一二三| 国产香蕉国产精品偷在线观看 | 国产你懂得| 欧美日韩精品在线播放| 在线日韩日本国产亚洲| 白浆视频在线观看| 久热这里只有精品6| 亚洲一区免费看| 亚洲综合激情另类专区| 农村乱人伦一区二区| 日韩精品一区二区三区swag| 伊人久久久大香线蕉综合直播| 国产97视频在线观看| 国产福利一区在线| 99精品在线看| 免费 国产 无码久久久| 77777亚洲午夜久久多人| 久久中文字幕av不卡一区二区| 性欧美久久| 久久福利片| 丁香婷婷久久| 精品乱码久久久久久久| 九九这里只有精品视频| 亚洲日韩第九十九页| 免费国产不卡午夜福在线观看| 精品无码视频在线观看| 99re在线视频观看| 成人国产小视频| 免费激情网站| 91在线日韩在线播放| 91人妻在线视频| 久久精品女人天堂aaa| 国产成人AV综合久久| 天堂在线www网亚洲| 久久一级电影| 国产男女免费完整版视频| 亚洲天堂免费观看| 午夜精品一区二区蜜桃| 国产亚洲精久久久久久久91|