1、防止數(shù)據(jù)庫(kù)被下載
由于Access數(shù)據(jù)庫(kù)加密機(jī)制過(guò)于簡(jiǎn)單,有效地防止數(shù)據(jù)庫(kù)被下載,就成了提高ASP+Access解決方案安全性的重中之重。以下兩種方法簡(jiǎn)單、有效。
(1)非常規(guī)命名法。為Access數(shù)據(jù)庫(kù)文件起一個(gè)復(fù)雜的非常規(guī)名字,并把它放在幾個(gè)目錄下。例如,對(duì)于網(wǎng)上書(shū)店的數(shù)據(jù)庫(kù),我們不把它命名為“book.mdb”或“Store.mdb”,而是起個(gè)非常規(guī)的名字,例如:faq9jl.mdb,再把它放在如./akkt/kj61/acd/av5的幾層目錄下,這樣黑客想通過(guò)猜的方式得到Access數(shù)據(jù)庫(kù)文件名就很難了。
(2)使用ODBC數(shù)據(jù)源。在ASP程序設(shè)計(jì)中,如果有條件,應(yīng)盡量使用ODBC數(shù)據(jù)源,不要把數(shù)據(jù)庫(kù)名寫(xiě)在程序中,否則,數(shù)據(jù)庫(kù)名將隨ASP源代碼的失密而一同失密,例如:
DBPath=Server.MapPath(“./akkt/kj61/acd/av5/faq9jl.mdb”)
conn.open“driver={MicrosoftAccessDriver(*.mdb)};dbq=”&DBPath
可見(jiàn),即使數(shù)據(jù)庫(kù)名字起得再怪異,隱藏的目錄再深,ASP源代碼失密后,也很容易被下載下來(lái)。如果使用ODBC數(shù)據(jù)源,就不會(huì)存在這樣的問(wèn)題了:
conn.open“ODBC-DSN名”
2、對(duì)ASP頁(yè)面進(jìn)行加密
為有效地防止ASP源代碼泄露,可以對(duì)ASP頁(yè)面進(jìn)行加密。我們?cè)捎脙煞N方法對(duì)ASP頁(yè)面進(jìn)行加密。一是使用組件技術(shù)將編程邏輯封裝入DLL之中;二是使用微軟的ScriptEncoder對(duì)ASP頁(yè)面進(jìn)行加密。使用組件技術(shù)存在的主要問(wèn)題是每段代碼均需組件化,操作比較繁瑣,工作量較大,而使用Encoder對(duì)ASP頁(yè)面進(jìn)行加密,操作簡(jiǎn)單、收效良好。ScriptEncoder的運(yùn)行程序是SCRENC.EXE,使用方法是:
SCRENC[/s][/f][/xl][/ldefLanguage][/edefExtension]inputfileoutputfile
其中:/s是屏蔽屏幕輸出;/f指定輸出文件是否覆蓋同名輸入文件;/xl指是否在.asp文件的頂部添加@Language指令;/ldefLanguag指定缺省的腳本語(yǔ)言;/edefExtension指定待加密文件的擴(kuò)展名。
3、注冊(cè)驗(yàn)證
為防止未經(jīng)注冊(cè)的用戶繞過(guò)注冊(cè)界面直接進(jìn)入應(yīng)用系統(tǒng),我們采用Session對(duì)象進(jìn)行注冊(cè)驗(yàn)證。例如,我們制作了下面的注冊(cè)頁(yè)面。
設(shè)計(jì)要求注冊(cè)成功后系統(tǒng)啟動(dòng)hrmis.asp?page=1頁(yè)面。假設(shè),不采用Session對(duì)象進(jìn)行注冊(cè)驗(yàn)證,則用戶在瀏覽器中敲入“URL/hrmis.asp?page=1”即可繞過(guò)注冊(cè)界面,直接進(jìn)入系統(tǒng)。
在此,利用Session對(duì)象進(jìn)行注冊(cè)驗(yàn)證:
〈%
’讀取使用者所輸入的賬號(hào)和密碼
UserID=Request(“UserID”)
Password=Request(“Password”)
’檢查UserID及Password是否正確
IfUserID<>“hrmis”OrPassword<>“password”Then
Response.Write“賬號(hào)錯(cuò)誤!”
Response.End
EndIf
’將Session對(duì)象設(shè)置為通過(guò)驗(yàn)證狀態(tài)
Session(“Passed”)=True
%〉
進(jìn)入應(yīng)用程序后,首先進(jìn)行驗(yàn)證:
〈%
’如果未通過(guò)驗(yàn)證,返回Login狀態(tài)
IfNotSession(“Passed”)Then
Response.Redirect“Login.asp”
EndIf
%〉