1.防止資料庫被下載
由於Access資料庫加密機制過於簡單,有效地防止資料庫被下載,就成了提高ASP+Access解決方案安全性的重中之重。以下兩種方法簡單、有效。
(1)非常規命名法。為Access資料庫檔案起一個複雜的非常規名字,並把它放在幾個目錄下。例如,對於網上書店的資料庫,我們不把它命名為“book.mdb”或“Store.mdb”,而是起個非常規的名字,例如:faq9jl.mdb,再把它放在如./akkt/kj61/acd/av5 的幾層目錄下,這樣駭客想通過猜的方式得到Access資料庫檔案名就很難了。
(2)使用ODBC資料來源。在ASP程式設計中,如果有條件,應盡量使用ODBC資料來源,不要把資料庫名寫在程式中,否則,資料庫名將隨ASP原始碼的失密而一同失密,例如:
DBPath = Server.MapPath(“./akkt/kj61/acd/av5/faq9jl.mdb ”)
conn.open “driver={Microsoft Access Driver (*.mdb)};dbq=”& DBPath
可見,即使資料庫名字起得再怪異,隱藏的目錄再深,ASP原始碼失密後,也很容易被下載下來。如果使用ODBC資料來源,就不會存在這樣的問題了:
conn.open “ODBC-DSN名”
2.對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.註冊驗證
為防止未經註冊的使用者繞過註冊介面直接進入應用系統,我們採用Session對象進行註冊驗證。例如,我們製作了下面的註冊頁面。
設計要求註冊成功後系統啟動hrmis.asp?page=1頁面。假設,不採用Session對象進行註冊驗證,則使用者在瀏覽器中敲入“URL/hrmis.asp?page=1”即可繞過註冊介面,直接進入系統。
在此,利用Session對象進行註冊驗證:
〈%
’讀取使用者所輸入的帳號和密碼
UserID = Request(“UserID”)
Password = Request(“Password”)
’檢查UserID 及Password 是否正確
If UserID <>“hrmis” Or Password <>“password” Then
Response.Write “帳號錯誤!”
Response.End
End If
’將Session 對象設定為通過驗證狀態
Session(“Passed”) = True
%〉
進入應用程式後,首先進行驗證:
〈%
’如果未通過驗證,返回Login狀態
If Not Session(“Passed”) Then
Response.Redirect “Login.asp”
End If
%〉