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