摘要:隨著網(wǎng)絡經(jīng)濟時代的到來,電子商務的迅速發(fā)展,企業(yè)對WEB數(shù)據(jù)庫提出了更高、更全面的安全性要求。該文從WEB數(shù)據(jù)庫安全的理念、相關技術入手,結合ASP.NET,提出WEB數(shù)據(jù)庫安全實踐方法建議。
關鍵詞:ASP.NET;安全性;WEB數(shù)據(jù)庫;SQL;用戶安全管理
中圖分類號:TN915 文獻標識碼:A 文章編號:1009-3044(2009)36-10403-03
網(wǎng)絡數(shù)據(jù)庫也叫Web數(shù)據(jù)庫。將數(shù)據(jù)庫技術與Web技術融合在一起,實現(xiàn)數(shù)據(jù)庫與網(wǎng)絡技術的無縫結合而形成的數(shù)據(jù)庫就是網(wǎng)絡數(shù)據(jù)庫。網(wǎng)絡經(jīng)濟的迅速發(fā)展,企業(yè)(或客戶)希望能夠在任何時候、任何地方、利用任何工具都可以獲得網(wǎng)絡上的信息,并享受網(wǎng)絡通信所帶來的經(jīng)濟效益。在實際應用中,網(wǎng)絡后臺數(shù)據(jù)庫的安全性和計算機系統(tǒng)得安全性相互聯(lián)系、相互支持,只有各個環(huán)節(jié)都安全了,才能保證數(shù)據(jù)庫的安全性,才能防止不合法的使用所造成的數(shù)據(jù)泄密、更改或破壞。
1 Web數(shù)據(jù)庫概述
Web數(shù)據(jù)庫中,用戶通過瀏覽器就可以完成對后臺數(shù)據(jù)庫中數(shù)據(jù)的插入、刪除、查詢和修改等操作。
隨著網(wǎng)絡技術的迅速發(fā)展, Web數(shù)據(jù)庫里一些商業(yè)數(shù)據(jù)被盜竊后公布于網(wǎng)上、公司商業(yè)網(wǎng)站的產(chǎn)品價格數(shù)據(jù)被惡意修改等等。出現(xiàn)這些現(xiàn)象的原因只有一個,就是來自網(wǎng)絡上對Web數(shù)據(jù)庫攻擊。到現(xiàn)在,針對Web數(shù)據(jù)庫的應用級入侵已經(jīng)變得越來越猖獗。如SQL注入、跨站點腳本攻擊和未經(jīng)授權的用戶訪問等,所有這些入侵都有可能繞過前臺安全系統(tǒng),并對數(shù)據(jù)庫系統(tǒng)攻擊。那么,在Web環(huán)境下的數(shù)據(jù)庫怎樣能夠為企業(yè)提供可依賴的安全服務呢?
2 提高Web數(shù)據(jù)庫安全性的對策
2.1 提高ASP.NET平臺的安全性
ASP.NET應用程序需要訪問WEB數(shù)據(jù)庫等非Windows資源,考慮以下幾個問題:
2.1.1 保護SQL會話狀態(tài)
默認(進程內(nèi))ASP.NET會話狀態(tài)處理程序會受到某些限制。例如,它不能在網(wǎng)絡中的其他計算機上運行。為了克服此限制,ASP.NET允許在SQL Server數(shù)據(jù)庫中存儲會話狀態(tài)。
可以在Machine.config或Web.config中配置SQL會話狀態(tài)。
machine.config的默認設置如下所示。
stateConnectionString=\"tepip=127.0.0.1:42424\" stateNetworkTimeout=\"10\" sqlConnecti0nString=\"data source=127.0.0.1; userid=sa;password=\" cookieless=\"1” timeout=\"20\"/> 默認情況下,SQL腳本InstallSqlState.sql(用于生成SQL會話狀態(tài)使用的數(shù)據(jù)庫)安裝在以下位置:C:\\WINNT\\Microsoft.NET\\Framework\\v1.0.3705。 2.1.2 采用基于信任連接 為了保證數(shù)據(jù)源的安全,應注意用戶標識、密碼和數(shù)據(jù)源名稱等連接信息的私密性。使用信任連接是連接到SQL Server最安全的方法,它不在連接字符串中公開用戶標識和密碼,建議使用該方法對連接進行身份驗證。采用基于信任連接SQL Server連接方式是ASP.NET連接SQL Server數(shù)據(jù)庫法中比較安全且有效的方式。 2.1.3 防止SQL注入式攻擊 現(xiàn)時很多網(wǎng)站都流行使用ASP+SQLServer平臺來開發(fā),開發(fā)者往往忽略對用戶輸入數(shù)據(jù)的合法性判斷而很容易存在安全隱患。當用戶提交一段SQL查詢代碼,根據(jù)返回的結果可獲得某些他想得知的數(shù)據(jù)。這就是SQL注入。攻擊者常利用這種技術,達到取得隱藏數(shù)據(jù)甚至執(zhí)行數(shù)據(jù)庫主機操作系統(tǒng)命令的目的,后果輕則導致敏感信息泄漏,重則使整個服務器受控。SQL注入的各種途徑如下:[2] 1) 注入點查詢法:如客戶端故意提交一個網(wǎng)址http://localhost/xgrsjj/index.asp?ID=123 and user>0,服務器運行Select * from 表名 where 某字段=123 and user>0,當然是運行不下去,錯誤信息為:MicrosoftOLE DB Provider for ODBC Drivers (Ox80040E07) [Microsoft][ODBC SQL Server Driver][SQL Server],將nvarchar值’bmbm’轉換為數(shù)據(jù)類型為int的列時發(fā)生語法錯誤。/ xgrsjj/index.asp,第47行。從上可知:該站使用SQL Server數(shù)據(jù)庫,用ODBC連接,連接帳號名rsj。 攻擊者可再假設網(wǎng)站管理員帳號存在表login中,管理員帳號名為admin,想知道管理員密碼,他可再提交http://...(上述語句) and(Select password from login where user_name=’admin’)>0。出錯信息為:Microsoft OLE DB Provider for ODBC Drivers(Ox80040EO?)[Microsoft][0DBc SQL Server Driver][SQL Server],將varchar值'!l@#*admin’轉換為數(shù)據(jù)類型為int的列時發(fā)生語法錯誤。/ xgrsjj/index.asp,第47行。很明顯,’!@#*admin’就是管理員admin的密碼!攻擊者就可用這個帳號和密碼接管該網(wǎng)站!再繼續(xù),他將可獲得數(shù)據(jù)庫連接帳號權限內(nèi)所能獲得的大量信息。 2) ASCII碼逐字解碼法:如客戶端輸入這個網(wǎng)址,http://localhost/ xgrsjj /news.asp?id=xx and(select top 1 len(username)from TestDB.dbo.admin)=x,其中x為1,2,...,n之一,username為用戶名字段,admin為表名,若運行正常則x就是第一個用戶名的長度。如輸入http://…=8運行正常,則第一個用戶名的長度為8。 再輸入這個網(wǎng)址http://…and(select top l ascii(substring (username,m,1))from TestDB.dbo.admin)=n,其中m為l到用戶名長度之一,猜測第i位的值,n為ASCII碼中14128之一,若運行正常則n對應的ASCII碼為用戶名某一位值。如輸入http://...substring(username,3,1)...=80時運行正常,則用戶名的第3位為字符P(ASCII為80)。 2.1.4 對特定字符串的過濾 現(xiàn)在一些網(wǎng)站的后臺管理程序存在著很大漏洞,只要在登錄表單輸入'or''and''or'、'or' 1'='1諸如此類的一些字符串就可以順利登錄。這種登錄的原理是在客戶端巧妙地構造一些特殊字符串,當在客戶端瀏覽器登錄表單里輸入這些字符串進行登錄驗證時, SQL的查詢語句就會把這個字符串加在SQL語句后面,并解釋成一個永真值,從而通過驗證。如前面所提到的’or \"and\"or' 、'or' 1'='1,SQL語句分別把它們解釋成“空” =“空”、1'=' 1,顯然這兩個值是永遠成立的[3]。 如果不進行字符串過濾的話,在default.aspx頁面的用戶名一欄輸入’or \"and\" or',點擊確定,系統(tǒng)將自動轉到success.aspx頁面,顯示登錄成功。下面講如何避免這一情況的發(fā)生,使用Replace系統(tǒng)函數(shù)進行字符串的過濾,Repalce語法規(guī)則如下: Replace(變量名稱,“要過濾的字符”, “要替換的字符”) 說明:“要替換的字符”那里如果留空,就是把“要過濾的字符”直接刪除。 把check.aspx中接收用戶名、密碼的表單程序作改造如下: 'check.aspx '嵌套了三個replace函數(shù),先過濾空格,然后過濾特殊字符’username=Replace{Replace(replace(request(\"username\"),\" \",\" \"),\" \",\" \"),\"or\",\" \") Pwd=Replace(Replace(replace(request(\"pwd\"),\"\", \" \"), \"or\",\" \") 2.2 提高數(shù)據(jù)庫自身安全 2.2.1 對用戶安全管理 Web數(shù)據(jù)庫是個極為復雜的系統(tǒng),因此很難進行正確的配置和安全維護,當然,必須首先要保證的就是數(shù)據(jù)庫用戶的權限的安全性。當用戶通過Web方式要對數(shù)據(jù)庫中的對象(表、視圖、觸發(fā)器、存儲過程等)進行操作時,必須通過數(shù)據(jù)庫訪問的身份認證。多數(shù)數(shù)據(jù)庫系統(tǒng)有默認賬號和密碼,可支持對數(shù)據(jù)庫資源的各級訪問。因此,很多重要的數(shù)據(jù)庫系統(tǒng)很可能受到威協(xié)。用戶存取權限是指不同的用戶對于不同的數(shù)據(jù)對象有不同的操作權限。存取權限由兩個要素組成:數(shù)據(jù)對象和操作類型。定義一個用戶的存取權限就是要定義這個用戶可以在哪些數(shù)據(jù)對象上進行哪些類型的操作。權限分系統(tǒng)權限和對象權限兩種。系統(tǒng)權限由DBA授予某些數(shù)據(jù)庫用戶,只有得到系統(tǒng)權限,才能成為數(shù)據(jù)庫用戶。對象權限是授予數(shù)據(jù)庫用戶對某些數(shù)據(jù)對象進行某些操作的權限,它既可由DBA授權,也可由數(shù)據(jù)對象的創(chuàng)建者授予。 2.2.2 采用視圖維護數(shù)據(jù)庫的安全性 可通過視圖訪問的數(shù)據(jù)不作為獨特的對象存儲在數(shù)據(jù)庫內(nèi),數(shù)據(jù)庫內(nèi)存儲的是SELECT語句,SEIECT語句的結果集構成視圖所返回的虛擬表。用戶可以用引用表時所防止用戶對基表的操作,在Transact—SQL語句中通過引用視圖名稱來使用虛擬表?;谝晥D的信息,隔離保護機制通過授予用戶操作視圖的權限,可以防止用戶對基表的操作,同時用戶對于數(shù)據(jù)庫具有小同的權限,為不同的用戶定義不同的視圖,可以限制用戶的訪問范圍,即當一個用戶在執(zhí)行某種任務時,他得到的權限只能使他看到完成此任務所應看到的數(shù)據(jù)庫的部分。 通過視圖機制把需要保密的數(shù)據(jù)對無權存取這些數(shù)據(jù)的用戶隱藏起來??梢詫?shù)據(jù)庫提供一定程度的安全保護。實際應用中常將視圖機制與授權機制結合起來使用,首先用視圖機制屏蔽一部分保密數(shù)據(jù),然后在視圖上進一步進行授權。 2.2.3 數(shù)據(jù)加密 數(shù)據(jù)安全隱患無處不在。一些機密數(shù)據(jù)庫、商業(yè)數(shù)據(jù)等必須防止它人非法訪問、修改、拷貝。如何保證數(shù)據(jù)安全?數(shù)據(jù)加密是應用最廣、成本最低廉而相對最可靠的方法。數(shù)據(jù)加密是保護數(shù)據(jù)在存儲和傳遞過程中不被竊取或修改的有效手段。數(shù)據(jù)加密系統(tǒng)包括對系統(tǒng)的不同部分要選擇何種加密算法、需要多高的安全級別、各算法之間如何協(xié)作等因素。在系統(tǒng)的不同部分要綜合考慮執(zhí)行效率與安全性之間的平衡。因為一般來講安全性總是以犧牲系統(tǒng)效率為代價的 如果要在Internet上的兩個客戶端傳遞安全數(shù)據(jù),這就要求客戶端之間可以彼此判斷對方的身份,傳遞的數(shù)據(jù)必須加密。當數(shù)據(jù)在傳輸中被更改時可以被發(fā)覺。 2.2.4 審計追蹤和攻擊檢測 身份驗證和存儲訪問控制是目前網(wǎng)絡信息系統(tǒng)設計中最為普遍的安全性方法,但目前沒有一種可行的方法,可以徹底的解決合法用戶在通過身份認證后濫用特權的問題。因而, 一些網(wǎng)絡信息系統(tǒng)中的大型DBMS提供的審計追蹤和攻擊檢測便成了一個十分重要的安全措施,也是任何一個安全系統(tǒng)中不可缺少的最后一道防線。審計功能在系統(tǒng)運行時,可以自動對數(shù)據(jù)庫的所有操作記錄在審計日志中,以此來監(jiān)視各用戶對數(shù)據(jù)庫施加的動作。攻擊檢測系統(tǒng)則是根據(jù)審計數(shù)據(jù)分析檢測內(nèi)部和外部攻擊者的攻擊企圖,再現(xiàn)導致系統(tǒng)現(xiàn)狀的事件,分析發(fā)現(xiàn)系統(tǒng)安全的弱點,追查相關責任者。 審計追蹤機制是指系統(tǒng)設置相應的日志記錄,特別是對數(shù)據(jù)更新、刪除、修改的記錄,以便日后查證。日志記錄的內(nèi)容可以包括操作人員的名稱、使用的密碼、用戶的IP地址、登錄時間、操作內(nèi)容等。若發(fā)現(xiàn)系統(tǒng)的數(shù)據(jù)遭到破壞,可以根據(jù)日志記錄追究責任,或者從日志記錄中判斷密碼是否被盜。以便修改密碼。重新分配權限,確保系統(tǒng)的安全。 2.2.5 網(wǎng)絡數(shù)據(jù)庫的備份與恢復 計算機故障的原因多種多樣,包括磁盤故障、電源故障、軟件故障、災害故障以及人為破壞等。一旦發(fā)生這種情況,就可能造成數(shù)據(jù)庫的數(shù)據(jù)丟失。因此數(shù)據(jù)庫系統(tǒng)必須采取必要的措施,以保證發(fā)生故障時,可以恢復數(shù)據(jù)庫。數(shù)據(jù)備份與恢復是實現(xiàn)信息系統(tǒng)安全運行的重要技術之一,能保證該系統(tǒng)因各種原因遭到破壞時,能夠將數(shù)據(jù)庫系統(tǒng)還原到正常狀態(tài)。 加強數(shù)據(jù)備份非常重要,數(shù)據(jù)庫擁有很多關鍵的數(shù)據(jù),這些數(shù)據(jù)一旦遭到破壞后果不堪設想。而這往往是入侵者真正關心的東西。不少管理員在這點上作得并不好。不是備份不完全,就是備份不及時。數(shù)據(jù)備份需要仔細計劃,制定出一個策略測試后再去實施,備份計劃也需要不斷地調(diào)整。 為了保證數(shù)據(jù)庫的安全性,應用數(shù)據(jù)庫的備份是很重要的舉措。一般的數(shù)據(jù)備份解決方案無非是以下三種:磁帶備份、雙機熱備份、手工備份方法。 2.2.6 改變SQL Server的端口并隱藏SQL Server實例 默認情況下,SQL Server使用1433端口監(jiān)聽,如果SQL Server配置的時候要把這個端口改變,這樣別人就不能很容易地知道使用的什么端口了。但通過微軟未公開的1434端口的UDP探測還是可以探測列SQL Server使用的TCP/IP端口。 為了過濾TCP端口1433以及UDP端口l434的數(shù)據(jù)包,防止圖謀者利用端口探測信息,避免數(shù)據(jù)庫服務器CPU負荷增大,SQL Server數(shù)據(jù)庫系統(tǒng)端口設置不容忽視。首先應在實例屬性中選擇TCP/IP協(xié)議的屬性,選擇隱藏SQL Server實例,則將禁止對試圖枚舉網(wǎng)絡上現(xiàn)有的SQL Server實例的客戶端所發(fā)出的廣播作出響應。這樣,可以避免利用1434來探測SQL server使用的TCP/IP端口。其次在實例屬性中選擇網(wǎng)絡配置中的TCP/IP協(xié)議的屬性,將TCP/IP使用的默認端口變?yōu)槠渌丝?。再次,在防火墻上設置禁用SQL Server端口。 2.2.7 防下載處理 為了防止網(wǎng)站在暴庫或被得知數(shù)據(jù)庫路徑后,用戶從客戶端下載數(shù)據(jù)庫。這里提供兩種簡單的數(shù)據(jù)庫防下載處理方法。 1) 修改IIS配置:這種方法適合有IIs修改權的用戶。在Internet信息服務中,找到登錄注冊系統(tǒng)發(fā)布的虛擬目錄,右鍵單擊/屬性/虛擬目錄選卡/配置/應用程序配置,如圖1所示。在應用程序映射中為.mdb添加一個可執(zhí)行程序即可。 2) 修改數(shù)據(jù)庫文件擴展名:把DataSource.mdb數(shù)據(jù)庫文件的后綴名改成.aspx,這樣可以避免從客戶端下載后臺數(shù)據(jù)庫。 3 結論 Web數(shù)據(jù)庫的安全是由網(wǎng)絡系統(tǒng)、操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)共同決定的,它的安全防范是多層次,大范圍的,任何一個環(huán)節(jié)上的疏忽,都會給整個系統(tǒng)帶來安全風險,因此必須根據(jù)具體的應用環(huán)境來進行全面分析,使安全隱患降到最小。 參考文獻: [1] 劉亮亮.開發(fā)更安全的ASP.NET 2.0應用程序[M].北京:人民郵電出版社,2008. [2] 劉麗琳.淺析網(wǎng)站數(shù)據(jù)庫安全中的SQL注入及防范措施[J].和田師范??茖W校學報,2007(1):188-189. [3] 翟曜.ASP.NET網(wǎng)絡數(shù)據(jù)庫安全性淺析[J].電腦編程與維護技巧,2006(10):80.