1 引言
隨著Internet的發(fā)展,Web技術(shù)日新月異,人們已經(jīng)不再滿足于靜態(tài)HTML技術(shù),更多的是要求動態(tài)、交互的網(wǎng)絡(luò)技術(shù)。繼通用網(wǎng)關(guān)接口(CGI)之后,微軟推出的IIS+ASP的解決方案作為一種典型的服務(wù)器端網(wǎng)頁設(shè)計技術(shù),被廣泛應(yīng)用在網(wǎng)上銀行、電子商務(wù)、網(wǎng)上調(diào)查、網(wǎng)上查詢、BBS、搜索引擎等各種互聯(lián)網(wǎng)應(yīng)用中。與此同時,以Microsoft的桌面數(shù)據(jù)庫Access和網(wǎng)絡(luò)數(shù)據(jù)庫SQL Server為代表的數(shù)據(jù)庫系統(tǒng),由于具有操作簡單、界面友好等特點,具有較大的用戶群體。就國內(nèi)現(xiàn)狀來看,大多數(shù)網(wǎng)站使用的腳本語言,用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%,由于開發(fā)者代碼編寫的過程考慮不夠周全,往往忽略程序代碼的安全性,而使程序腳本被注入也成為必然。
2 安全隱患分析
2.1源代碼安全性隱患
由于ASP程序采用非編譯性語言,大大降低了程序源代碼的安全性。如果黑客侵入站點,就可以獲得ASP源代碼;同時對于租用服務(wù)器的用戶,因個別服務(wù)器出租商的職業(yè)道德問題,也會造成ASP應(yīng)用程序源代碼泄露。
2.2被忽視的注冊驗證問題
ASP代碼使用表單實現(xiàn)交互,而相應(yīng)的內(nèi)容會反映在瀏覽器的地址欄中,如果不采用適當(dāng)?shù)陌踩胧?,只要記下這些內(nèi)容,就可以繞過驗證直接進(jìn)入某一頁面。例如在瀏覽器中敲入“...page.asp?x=1”,即可不經(jīng)過表單頁面直接進(jìn)入滿足“x=1”條件的頁面。因此,在驗證或注冊頁面中,必須采取特殊措施來避免此類問題的產(chǎn)生。
2.3 SQL注入攻擊
所謂SQL注入(SQL Injection),就是利用某些WEB應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性檢測不嚴(yán)或不檢測的特點,故意從客戶端提交一段特殊的數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,達(dá)到收集程序、數(shù)據(jù)庫及服務(wù)器的信息,獲取想得到而通過正常途徑無法得到的資料,使整個網(wǎng)站服務(wù)器失控甚至對網(wǎng)站進(jìn)行破壞性攻擊的目的。
程序存在SQL注入,追其原因,是因為代碼或者編碼的不完善。但說到底,是程序員的惰性。代碼的不完善,往往是因為在程序編寫的過程中,沒有考慮到代碼的健壯性及安全性的結(jié)果。
當(dāng)然,程序運行環(huán)境的先天缺陷也是人為的,這種現(xiàn)象無法完全杜絕避免。從攻擊者的角度來看,使用SQL注入能夠避免絕大多數(shù)防火墻的防御,不留攻擊痕跡,攻擊手法多種多樣,因此才會導(dǎo)致SQL注入攻擊手段的興起。
3 提高網(wǎng)站安全性的方法
3.1對ASP頁面進(jìn)行加密
為有效地防止ASP源代碼泄露,可以對ASP頁面進(jìn)行加密。我們曾采用兩種方法對ASP頁面進(jìn)行加密:一是使用組件技術(shù)將編程邏輯封裝入DLL之中;二是使用微軟的Script Encoder對ASP頁面進(jìn)行加密。使用組件技術(shù)存在的主要問題是每段代碼均需組件化,操作比較繁瑣,工作量較大。而使用Encoder對ASP頁面進(jìn)行加密,操作簡單、收效良好。Script Encoder的運行程序是SCRENC.EXE,使用方法是:
SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile
其中:/s 是屏蔽屏幕輸出;/f 指定輸出文件是否覆蓋同名輸入文件;/xl 指是否在.asp文件的頂部添加@Language指令;/l defLanguag指定缺省的腳本語言; /e defExtension 指定待加密文件的擴展名。
3.2 注冊驗證和加密
為防止未經(jīng)注冊的用戶繞過注冊界面直接進(jìn)入應(yīng)用系統(tǒng),我們采用Session對象進(jìn)行注冊驗證。例如:我們制作了下面的注冊頁面。
設(shè)計要求:注冊成功后系統(tǒng)啟動hrmis.asp?page=1頁面。假設(shè)不采用Session對象進(jìn)行注冊驗證,則用戶在瀏覽器中敲入“URL/hrmis.asp?page=1”即可繞過注冊界面,直接進(jìn)入系統(tǒng)。
在此,利用Session對象進(jìn)行注冊驗證:
“hrmis\" Or Password \"password\" Then
Response.Write “賬號錯誤!”
Response.End
End If
’將Session 對象設(shè)置為通過驗證狀態(tài)
Session(\"Passed\") = True
%>
進(jìn)入應(yīng)用程序后,首先進(jìn)行驗證。
程序員要做的另一件事是給用戶密碼加密,一般用MD5加密較好。MD5沒有反向算法,不能解密,人家即使知道經(jīng)加密后存在數(shù)據(jù)庫里的像亂碼一樣的密碼,他也沒辦法知道原始密碼。
3.3檢驗敏感字符/字符串
有些程序員采取針對一些敏感的字符串,主要是對SQL命令或關(guān)鍵字進(jìn)行處理,把它們從客戶端提交的信息中找到、刪除,并把剩余的信息默認(rèn)為安全信息寫入數(shù)據(jù)庫。雖然在一定程度上有效,但有“治標(biāo)不治本”的嫌疑,舉例來說明其弱點,當(dāng)客戶端的輸入為“…ccmdmcmdd…”時,在對敏感字符串“cmd”替換刪除以后,剩下的字符正好是“…cmd…”。新的攻擊方式正在被不斷發(fā)現(xiàn),只要允許服務(wù)端程序使用這些提交信息,就總有受到攻擊的可能??梢娺@個方法是不健全的,稍加變化即可躲過檢查。
其實,最好的方法就是一旦檢測到敏感字符/字符串,只要把它們屏蔽,并針對數(shù)據(jù)庫的操作即行中止。
3.4屏蔽出錯信息
精心配置IIS,打造一個安全Web服務(wù)器是一項科學(xué)嚴(yán)謹(jǐn)?shù)墓ぷ鳎玛P(guān)網(wǎng)絡(luò)安全之首要,也是服務(wù)器管理員的神圣職責(zé),具體做法請參見有關(guān)資料。針對防范SQL注入要做的主要是把IIS設(shè)置成不管出什么樣的ASP錯誤,只給出一種錯誤提示信息,即http 500錯誤,再小心設(shè)置數(shù)據(jù)庫用戶權(quán)限。這樣人家就無法入侵了。首先把500:100這個錯誤的默認(rèn)提示頁面
C:\\ WINDOWS\\ Help\\ iisHelp\\ common
500-100.asp
改成
C:\\ WINDOW \\Help \\iisHelp \\Common
500.htm。
4 結(jié)束語
網(wǎng)絡(luò)攻擊是安全領(lǐng)域的新事物,但發(fā)展快危害大,而且經(jīng)常被一些網(wǎng)站開發(fā)或網(wǎng)頁設(shè)計人員所忽視。近年來,給網(wǎng)站的穩(wěn)定運行帶來了很大的影響,我們提高安全意識,在設(shè)計開發(fā)和網(wǎng)站運行的過程中隨時注意查堵網(wǎng)站安全漏洞,在很大程度上提高網(wǎng)站運行的安全性。
參考文獻(xiàn)
[1]周天思,孫明麗,龐婭娟.ASP開發(fā)技術(shù)大全[M].人民郵電出版社,2007.
[2]薛小龍.ASP典型系統(tǒng)實戰(zhàn)與解析[M].北京:電子工業(yè)出版社,2007.
[3]張友生,米安然.計算機病毒與木馬程序剖析[M].北京科海電子出版社,2003.