1.防止數據庫被下載
由于Access數據庫加密機制過于簡單,有效地防止數據庫被下載,就成了提高ASP+Access解決方案安全性的重中之重。以下兩種方法簡單、有效。
(1)非常規(guī)命名法。為Access數據庫文件起一個復雜的非常規(guī)名字,并把它放在幾個目錄下。例如,對于網上書店的數據庫,我們不把它命名為“book.mdb”或“Store.mdb”,而是起個非常規(guī)的名字,例如: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.注冊驗證
為防止未經注冊的用戶繞過注冊界面直接進入應用系統(tǒng),我們采用Session對象進行注冊驗證。例如,我們制作了下面的注冊頁面。
設計要求注冊成功后系統(tǒng)啟動hrmis.asp?page=1頁面。假設,不采用Session對象進行注冊驗證,則用戶在瀏覽器中敲入“URL/hrmis.asp?page=1”即可繞過注冊界面,直接進入系統(tǒng)。
在此,利用Session對象進行注冊驗證:
<%
’讀取使用者所輸入的賬號和密碼
UserID = Request(“UserID”)
Password = Request(“Password”
’檢查UserID 及Password 是否正確
If UserID <>“hrmis” Or Password <>“password” Then
Response.Write “賬號錯誤!”
Response.End
End If
’將Session 對象設置為通過驗證狀態(tài)
Session(“Passed”) = True
%>
進入應用程序后,首先進行驗證:
<%
’如果未通過驗證,返回Login狀態(tài)
If Not Session(“Passed”) Then
Response.Redirect “Login.asp”
End If
%>
通過對IIS+ASP+Access網上應用系統(tǒng)安全性的研究,我們對現有系統(tǒng)進行了改造,收到了較好的效果