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