ASP+Access的安全隱患及對策

來源:互聯網
上載者:User
access|安全|安全隱患 隨著Internet的發展,Web技術日新月異。繼通用閘道介面(CGI)之後,“ASP”(Active Server Pages)作為一種典型的伺服器端網頁設計技術,被廣泛地應用在網上銀行、電子商務、搜尋引擎等各種互連網應用中。同時Access資料庫作為微軟推出的以標準JET為引擎的案頭型資料庫系統,由於具有操作簡單、介面友好等特點,具有較大的使用者群體。因此ASP+Access成為許多中小型網上應用系統的首選方案。但ASP+Access解決方案在為我們帶來便捷的同時,也帶來了不容忽視的安全問題。
ASP+Access的安全隱患
ASP+Access解決方案的主要安全隱患來自Access資料庫的安全性,其次在於ASP網頁設計過程中的安全性漏洞。
1.Access資料庫的儲存隱患
在ASP+Access應用系統中,如果獲得或者猜到Access資料庫的儲存路徑和資料庫名,則該資料庫就可以被下載到本地。例如:對於網上書店的Access資料庫,人們一般命名為book.mdb、store.mdb等,而儲存的路徑一般為“URL/database”或乾脆放在根目錄(“URL/”)下。這樣,只要在瀏覽器地址欄中敲入地址:“URL/database/store.mdb”,就可以輕易地把store.mdb下載到本地的機器中。
2.Access資料庫的解密隱患
由於Access資料庫的加密機制非常簡單,所以即使資料庫設定了密碼,解密也很容易。該資料庫系統通過將使用者輸入的密碼與某一固定密鑰進行異或來形成一個加密串,並將其儲存在*.mdb檔案中從地址“&H42”開始的地區內。由於異或操作的特點是“經過兩次異或就恢複原值”,因此,用這一密鑰與*.mdb檔案中的加密串進行第二次異或操作,就可以輕鬆地得到Access資料庫的密碼。基於這種原理,可以很容易地編製出解密程式。
由此可見,無論是否設定了資料庫密碼,只要資料庫被下載,其資訊就沒有任何安全性可言了。
3.原始碼的安全隱患
由於ASP程式採用的是非編譯性語言,這大大降低了程式原始碼的安全性。任何人只要進入網站,就可以獲得原始碼,從而造成ASP應用程式原始碼的泄露。
4.程式設計中的安全隱患  
ASP代碼利用表單(form)實現與使用者互動的功能,而相應的內容會反映在瀏覽器的地址欄中,如果不採用適當的安全措施,只要記下這些內容,就可以繞過驗證直接進入某一頁面。例如在瀏覽器中敲入“……page.asp?x=1”,即可不經過表單頁面直接進入滿足“x=1”條件的頁面。因此,在設計驗證或註冊頁面時,必須採取特殊措施來避免此類問題的發生。
提高資料庫的安全性
由於Access資料庫加密機制過於簡單,因此,如何有效地防止Access資料庫被下載,就成了提高ASP+Access解決方案安全性的重中之重。
1.非常規命名法
防止資料庫被找到的簡便方法是為Access資料庫檔案起一個複雜的非常規名字,並把它存放在多層目錄下。例如,對於網上書店的資料庫檔案,不要簡單地命名為“book.mdb”或“store.mdb”,而是要起個非常規的名字,例如:faq19jhsvzbal.mdb,再把它放在如./akkjj16t/kjhgb661/acd/avccx55 之類的深層目錄下。這樣,對於一些通過猜的方式得到Access資料庫檔案名的非法存取方法起到了有效阻止作用。
2.使用ODBC資料來源
在ASP程式設計中,應盡量使用ODBC資料來源,不要把資料庫名直接寫在程式中,否則,資料庫名將隨ASP原始碼的失密而一同失密。例如:
DBPath = Server.MapPath(“./akkjj16t/
kjhgb661/acd/avccx55/faq19jhsvzbal.mdb ”)
conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath
可見,即使資料庫名字起得再怪異,隱藏的目錄再深,ASP原始碼失密後,資料庫也很容易被下載下來。如果使用ODBC資料來源,就不會存在這樣的問題了:
conn.open “ODBC-DSN名”
對ASP頁面進行加密
為有效地防止ASP原始碼泄露,可以對ASP頁面進行加密。一般有兩種方法對ASP頁面進行加密。一種是使用組件技術將編程邏輯封裝入DLL之中;另一種是使用微軟的Script Encoder對ASP頁面進行加密。筆者認為,使用組件技術存在的主要問題是每段代碼均需組件化,操作比較煩瑣,工作量較大;而使用Script Encoder對ASP頁面進行加密,操作簡單、收效良好。Script Encoder方法具有許多優點:
1.HTML仍具有很好的可編輯性。Script Encoder只加密在HTML頁面中嵌入的ASP代碼,其他部分仍保持不變,這就使得我們仍然可以使用FrontPage或Dreamweaver等常用網頁編輯工具對HTML部分進行修改、完善,只是不能對ASP加密部分進行修改,否則將導致檔案失效。
2.操作簡單。只要掌握幾個命令列參數即可。Script Encoder的運行程式是screnc.exe,其使用方法如下:
screnc [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile
其中的參數含義如下:
s:屏蔽螢幕輸出;
f:指定輸出檔案是否覆蓋同名輸入檔案;
xl:是否在.asp檔案的頂部添加@Language指令;
l:defLanguag指定預設的指令碼語言;
e:defExtension 指定待加密檔案的副檔名。
3.可以大量加密檔案。使用Script Encoder可以對目前的目錄中的所有的ASP 檔案進行加密,並把加密後的檔案統一輸出到相應的目錄中。例如:
screnc *.asp c:\temp
4. Script Encoder是免費軟體。該加密軟體可以從微軟網站下載:http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe。下載後,運行安裝即可。
利用Session對象進行註冊驗證
為防止未經註冊的使用者繞過註冊介面直接進入應用系統,可以採用Session對象進行註冊驗證。Session對象最大的優點是可以把某使用者的資訊保留下來,讓後續的網頁讀取。例如,要設計如圖1所示的註冊頁面。

圖1 註冊頁面
設計要求使用者註冊成功後系統啟動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
%>



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。