ASP+Access的安全隱患及對策 - tech.2EC.cn - 開(kāi)發(fā)者資料庫
| ASP+Access的安全隱患及對策 |
|
| | | | | | 隨著(zhù)Internet的發(fā)展,Web技術(shù)日新月異。繼通用網(wǎng)關(guān)接口(CGI)之后,“ASP”(Active Server Pages)作為一種典型的服務(wù)器端網(wǎng)頁(yè)設計技術(shù),被廣泛地應用在網(wǎng)上銀行、電子商務(wù)、搜索引擎等各種互聯(lián)網(wǎng)應用中。同時(shí)Access數據庫作為微軟推出的以標準JET為引擎的桌面型數據庫系統,由于具有操作簡(jiǎn)單、界面友好等特點(diǎn),具有較大的用戶(hù)群體。因此ASP+Access成為許多中小型網(wǎng)上應用系統的首選方案。但ASP+Access解決方案在為我們帶來(lái)便捷的同時(shí),也帶來(lái)了不容忽視的安全問(wèn)題。 ASP+Access的安全隱患 ASP+Access解決方案的主要安全隱患來(lái)自Access數據庫的安全性,其次在于ASP網(wǎng)頁(yè)設計過(guò)程中的安全漏洞。 1.Access數據庫的存儲隱患 在ASP+Access應用系統中,如果獲得或者猜到Access數據庫的存儲路徑和數據庫名,則該數據庫就可以被下載到本地。例如:對于網(wǎng)上書(shū)店的Access數據庫,人們一般命名為book.mdb、store.mdb等,而存儲的路徑一般為“URL/database”或干脆放在根目錄(“URL/”)下。這樣,只要在瀏覽器地址欄中敲入地址:“URL/database/store.mdb”,就可以輕易地把store.mdb下載到本地的機器中。 2.Access數據庫的解密隱患 由于A(yíng)ccess數據庫的加密機制非常簡(jiǎn)單,所以即使數據庫設置了密碼,解密也很容易。該數據庫系統通過(guò)將用戶(hù)輸入的密碼與某一固定密鑰進(jìn)行異或來(lái)形成一個(gè)加密串,并將其存儲在*.mdb文件中從地址“&H42”開(kāi)始的區域內。由于異或操作的特點(diǎn)是“經(jīng)過(guò)兩次異或就恢復原值”,因此,用這一密鑰與*.mdb文件中的加密串進(jìn)行第二次異或操作,就可以輕松地得到Access數據庫的密碼?;谶@種原理,可以很容易地編制出解密程序。 由此可見(jiàn),無(wú)論是否設置了數據庫密碼,只要數據庫被下載,其信息就沒(méi)有任何安全性可言了。 3.源代碼的安全隱患 由于ASP程序采用的是非編譯性語(yǔ)言,這大大降低了程序源代碼的安全性。任何人只要進(jìn)入站點(diǎn),就可以獲得源代碼,從而造成ASP應用程序源代碼的泄露。 4.程序設計中的安全隱患 ASP代碼利用表單(form)實(shí)現與用戶(hù)交互的功能,而相應的內容會(huì )反映在瀏覽器的地址欄中,如果不采用適當的安全措施,只要記下這些內容,就可以繞過(guò)驗證直接進(jìn)入某一頁(yè)面。例如在瀏覽器中敲入“……page.aspx=1”,即可不經(jīng)過(guò)表單頁(yè)面直接進(jìn)入滿(mǎn)足“x=1”條件的頁(yè)面。因此,在設計驗證或注冊頁(yè)面時(shí),必須采取特殊措施來(lái)避免此類(lèi)問(wèn)題的發(fā)生。 提高數據庫的安全性 由于A(yíng)ccess數據庫加密機制過(guò)于簡(jiǎn)單,因此,如何有效地防止Access數據庫被下載,就成了提高ASP+Access解決方案安全性的重中之重。 1.非常規命名法 防止數據庫被找到的簡(jiǎn)便方法是為Access數據庫文件起一個(gè)復雜的非常規名字,并把它存放在多層目錄下。例如,對于網(wǎng)上書(shū)店的數據庫文件,不要簡(jiǎn)單地命名為“book.mdb”或“store.mdb”,而是要起個(gè)非常規的名字,例如:faq19jhsvzbal.mdb,再把它放在如./akkjj16t/kjhgb661/acd/avccx55 之類(lèi)的深層目錄下。這樣,對于一些通過(guò)猜的方式得到Access數據庫文件名的非法訪(fǎng)問(wèn)方法起到了有效的阻止作用。 2.使用ODBC數據源 在ASP程序設計中,應盡量使用ODBC數據源,不要把數據庫名直接寫(xiě)在程序中,否則,數據庫名將隨ASP源代碼的失密而一同失密。例如: DBPath = Server.MapPath(“./akkjj16t/ kjhgb661/acd/avccx55/faq19jhsvzbal.mdb ”) conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath 可見(jiàn),即使數據庫名字起得再怪異,隱藏的目錄再深,ASP源代碼失密后,數據庫也很容易被下載下來(lái)。如果使用ODBC數據源,就不會(huì )存在這樣的問(wèn)題了: conn.open “ODBC-DSN名” 對ASP頁(yè)面進(jìn)行加密 為有效地防止ASP源代碼泄露,可以對ASP頁(yè)面進(jìn)行加密。一般有兩種方法對ASP頁(yè)面進(jìn)行加密。一種是使用組件技術(shù)將編程邏輯封裝入DLL之中;另一種是使用微軟的Script Encoder對ASP頁(yè)面進(jìn)行加密。筆者認為,使用組件技術(shù)存在的主要問(wèn)題是每段代碼均需組件化,操作比較煩瑣,工作量較大;而使用Script Encoder對ASP頁(yè)面進(jìn)行加密,操作簡(jiǎn)單、收效良好。Script Encoder方法具有許多優(yōu)點(diǎn): 1.shtmL仍具有很好的可編輯性。Script Encoder只加密在HTML頁(yè)面中嵌入的ASP代碼,其他部分仍保持不變,這就使得我們仍然可以使用FrontPage或Dreamweaver等常用網(wǎng)頁(yè)編輯工具對HTML部分進(jìn)行修改、完善,只是不能對ASP加密部分進(jìn)行修改,否則將導致文件失效。 2.操作簡(jiǎn)單。只要掌握幾個(gè)命令行參數即可。Script Encoder的運行程序是screnc.exe,其使用方法如下: screnc [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile 其中的參數含義如下: s:屏蔽屏幕輸出; f:指定輸出文件是否覆蓋同名輸入文件; xl:是否在.asp文件的頂部添加@Language指令; l:defLanguag指定缺省的腳本語(yǔ)言; e:defExtension 指定待加密文件的擴展名。 3.可以批量加密文件。使用Script Encoder可以對當前目錄中的所有的ASP 文件進(jìn)行加密,并把加密后的文件統一輸出到相應的目錄中。例如: screnc *.asp c: emp 4. Script Encoder是免費軟件。該加密軟件可以從微軟網(wǎng)站下載:http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe。下載后,運行安裝即可。 利用Session對象進(jìn)行注冊驗證 為防止未經(jīng)注冊的用戶(hù)繞過(guò)注冊界面直接進(jìn)入應用系統,可以采用Session對象進(jìn)行注冊驗證。Session對象最大的優(yōu)點(diǎn)是可以把某用戶(hù)的信息保留下來(lái),讓后續的網(wǎng)頁(yè)讀取。例如,要設計如圖1所示的注冊頁(yè)面。 [sayyes]http://www.computerworld.com.cn/htm/app/aprog/01_7_13_2.jpg[/sayyes] 設計要求用戶(hù)注冊成功后系統啟動(dòng)hrmis.asppage=1頁(yè)面。如果不采用Session對象進(jìn)行注冊驗證,則用戶(hù)在瀏覽器中敲入“URL/hrmis.asppage=1”即可繞過(guò)注冊界面,直接進(jìn)入系統。利用Session對象可以有效阻止這一情況的發(fā)生。相關(guān)的程序代碼如下: <% ‘ 讀取用戶(hù)輸入的賬號和密碼 UserID = Request(“UserID”) Password = Request(“Password”) ‘ 檢查UserID 及Password 是否正確(實(shí)際程序可能會(huì )比較復雜) If UserID <>“hrmis” Or Password <> “password” Then Response.Write “賬號錯誤!” Response.End End If ‘將Session 對象設置為通過(guò)驗證狀態(tài) Session(“Passed”) = True %> 進(jìn)入應用程序后,首先進(jìn)行驗證: <% ‘如果未通過(guò)驗證,返回Login狀態(tài) If Not Session(“Passed”) Then Response.Redirect “Login.asp” End If %> | | |
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。