【摘要】 針對B/S模式下SQL Server數據庫存在的各種安全問題,從數據庫服務器開發的角度提出的安全策略,以增強系統的安全性,有效地保護系統數據。
【關鍵詞】 SQL Server;安全策略;SQL注入攻擊; MD5加密
隨著互聯網絡的日益發展和壯大,越來越多的應用系統采用基于瀏覽器/服務器的模式(Browser/Server model,簡稱B/S)進行開發。采用Windows系列的操作系統作為服務器、Internet信息服務(Internet Information Services,簡稱IIS)作為WEB服務器、ASP或ASP.NET為開發平臺、SQL Server 2000/2005為后臺數據庫服務器的組合更是舉不勝舉。這樣的組合,成為了業界在安全問題上的典型例子,這當中有像Windows操作系統的游客賬號安全性、早期IIS版本的漏洞、ASP自身的缺陷、SQL Server數據庫端的注入等安全問題。這樣就給基于WEB的應用系統的安全性帶來嚴峻的考驗,我們必須有針對性的對各種安全問題進行深入的分析,提出有效的解決方案。
一、現有安全問題及其分類
(一)數據庫服務器配置安全問題
主要是指對數據庫服務器操作系統的管理、升級、配置和網絡安全的管理帶來的安全問題,一般可以理解為是操作系統的管理員疏忽所致。
(二)WEB服務器配置安全問題
WEB服務器操作系統的配置管理也相當有講究,不僅要升級最新的補丁,還需要實時更新防毒軟件和防木馬軟件等;包括防火墻和網絡過濾軟件、IP過濾系統等安裝和配置。
(三)數據庫服務器開發的安全問題
這類安全問題通常是對數據庫管理系統本身的管理存在較大的漏洞和風險。
1.服務器帳戶安全。主要體現在登錄到數據庫服務器的SQL Server帳戶信息管理不善,通常可能出現的情況是系統管理員sa密碼為空或密碼過于簡單;也可能出現數據庫中guest用戶激活并且權限過高,造成數據庫數據的丟失或泄露。
2.使用服務器高級功能不當。有很多WEB應用系統都把所有的業務邏輯都放在客戶端或WEB服務器來實現,沒有充分利用數據庫像存儲過程之類的對象,不僅僅是帶來網絡流量的增加,還面臨像“SQL注入攻擊”之類的安全問題。
3.敏感數據安全問題。如果WEB程序把系統賬戶信息的密碼等敏感數據用明文來進行存儲,最大的問題就是一旦數據庫出現安全問題,發生系統賬戶信息泄露,必將造成巨大的影響,甚至面臨法律責任;使用明文密碼也不能有效的避免操作人員的職業道德淪喪而導致的惡劣后果。
(四) 應用系統開發的安全問題
WEB服務器端編程時也可能由于程序員或系統分析師的疏忽大意而給人以可趁之機。
1.直接暴露數據庫連接信息。通常應用系統都會將數據庫的連接信息以配置文件(過去是.ini文件,現在一般采用.xml文件)給出,既方便程序讀取,也方便安裝時的隨意修改。但一旦配置文件信息發生泄露,則數據庫服務器的相關信息就完全暴露了,將導致嚴重的后果。
2.未對用戶的輸入數據進行限制。赫赫有名的“SQL注入攻擊”其實是利用程序中用戶輸入的任意性,使用了像“;”(半角分號)、“'”(半角單引號)以及像select、insert、delete等關鍵字來實施非法獲取數據庫信息或者進行破壞性的操作等。
3.忽視了WEB報錯信息。如果在IIS上不做任何新的處理,則網頁在遇到錯誤時,服務器默認會顯示所有錯誤信息,對于“老鳥”級別的用戶來說,這些錯誤信息對于入侵系統來說,作用相當巨大。
二、相應的安全策略
在前面提及的安全問題中,與服務器配置相關的,在此不再贅述;本節主要提出在數據庫服務器的開發中的安全策略和應用系統開發中安全策略。
(一)數據庫端的開發安全策略
數據庫服務器在開發時可以采用一些安全策略來盡量避免前面遇到的安全問題。
1.建立恰當權限的數據庫賬戶。根據應用系統中登錄系統的角色不同,完全可以在數據庫中創建不同權限的登錄名來對應不同的數據庫權限。即便擁有讀數據權限賬號出問題,也不至于造成巨大的影響。
2.充分利用存儲過程。存儲過程(storedprocedure)是一種高級數據庫對象,既可以簡化命令,又可以有效地防止某些“SQL注入”的攻擊,而且存儲過程還采用了“預編譯”的機制,大提高了執行效率。
3.加密口令等敏感數據。為了在數據庫泄漏也能最大程度地保持數據的安全,一般對敏感數據(如口令)都可以采用單向的加密方法,如MD5加密算法。這種方法的優點是單向加密,加密后的密文不能翻譯為明文,主要用來保護口令等數據。
(二)應用系統的開發安全策略
WEB應用端的開發相關安全性也應該得到良好的解決。
1.封裝數據庫連接信息。把數據庫連接信息存放于配置文件中雖然方便,但同時也帶來系統安全問題,所以,可以考慮把數據庫連接信息加密以后存入源碼中,并同時編譯生成中間代碼,如C#的.dll文件或Java的.class文件。
2.過濾輸入的特殊符號和關鍵字。“SQL注入攻擊”存在的主要原因是用戶可以自由輸入各種符號,所以,最為直接的方式就是過濾用戶輸入的敏感字符,如“'”(半角單引號)、“;”(半角分號)以及各種數據庫相關的關鍵字,尤其是可能嚴重后果的“delete”、“drop”、“truncate table”等,以保護數據庫的安全性;同時也能夠有效的保護數據防止意外泄漏。
3.自定義WEB服務器的錯誤信息。在程序出現錯誤時,為了有效的保護服務器數據和信息,可以對出錯的信息進行自定義。自定義的含義即是指定新的錯誤頁面來代替IIS默認的錯誤信息,這樣,可以有效的保護服務器的錯誤信息,也能達到對用戶透明,使錯誤信息看起來更人性化,更為重要的,是進一步保護應用系統的安分性。
通過以上的處理,WEB系統的安全性改進了很多。我們在小區物業管理系統中使用以上相關的安全策略,系統的安全性得到了較大的改善。但是,我們還應該看到,因為涉及到數據庫服務器,應用服務器,客戶端程序(尤其是現在富客戶程序的大量應用)三個方面,整個系統的安全性工作還有相當長的路要走,這也是一項不可能有終點的工作,還需要進行不斷的探索和研究。
參考文獻
[1]谷震離,杜根遠.SQL Server數據庫應用程序中數據庫安全性研究[J].計算機工程與設計.2007(8)
[2]微軟公司.Programming a Microsoft SQL Server 2000 database[M].北京:清華大學出版社,2001
[3]潘志紅.WEB環境下SQL Server的數據保護[J].北京聯合大學學報(自然科學版).2006(9)
[4]吳世忠,Schneier.B應用密碼學:協議算法與C源程序[M].北京:機械出版社,2001
注:本文為樂山師范學院校級科研基金項目(20923)