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