郭敏
[摘要]在ASP(Active Server Pages)作為一種典型的服務(wù)器端網(wǎng)頁設(shè)計技術(shù),被廣泛地應(yīng)用在網(wǎng)上銀行、電子商務(wù)、搜索引擎等各種互聯(lián)網(wǎng)應(yīng)用中,同時Access數(shù)據(jù)庫作為微軟推出的以標(biāo)準(zhǔn)JET為引擎的桌面型數(shù)據(jù)庫系統(tǒng),由于具有操作簡單、界面友好等特點,具有較大的用戶群體。但ASP+Access解決方案在為我們帶來便捷的同時,由于數(shù)據(jù)庫中數(shù)據(jù)大量集中存放,并且為眾多用戶直接共享,所以數(shù)據(jù)庫的安全問題就尤為突出。
[關(guān)鍵詞]網(wǎng)站建設(shè) 數(shù)據(jù)庫安全 Access
隨著Internet的發(fā)展,Web技術(shù)日新月異,ASP(Active Server Pages)作為一種典型的服務(wù)器端網(wǎng)頁設(shè)計技術(shù),被廣泛地應(yīng)用在網(wǎng)上銀行、電子商務(wù)、搜索引擎等各種互聯(lián)網(wǎng)應(yīng)用中。同時Access數(shù)據(jù)庫作為微軟推出的以標(biāo)準(zhǔn)JET為引擎的桌面型數(shù)據(jù)庫系統(tǒng),由于具有操作簡單、界面友好等特點,具有較大的用戶群體。因此ASP+Access成為許多中小型網(wǎng)上應(yīng)用系統(tǒng)的首先方案。但ASP+Access解決方案在為我們帶來便捷的同時,由于數(shù)據(jù)庫數(shù)據(jù)中數(shù)據(jù)大量集中存放,并且為眾多用戶直接共享,所以數(shù)據(jù)庫的安全問題就尤為突出。
一、ASP+Access的安全隱患
ASP+Access解決方案的主要安全隱患來自Access數(shù)據(jù)庫的安全性,其次在于ASP網(wǎng)頁設(shè)計過程中的安全漏洞。
1.Access數(shù)據(jù)庫的存儲隱患
在ASP+Access應(yīng)用系統(tǒng)中,如果獲得或者猜到Access數(shù)據(jù)的存儲路徑和數(shù)據(jù)庫名,則該數(shù)據(jù)庫就可以被下載到本地。
例如:對于網(wǎng)上書店的Access數(shù)據(jù)庫,人們一般命名為book.mdb、store.mdb等,而存儲的路徑一般為“URL/database”或干脆放在根目錄(“URL/”)下。這樣,只要在瀏覽器地址欄中敲入地址:“URL/ database/store.mdb”,就可以輕易地把stroe.mdb下載到本地的機(jī)器中。
2.Access數(shù)據(jù)庫的解密隱患
由于Access數(shù)據(jù)庫的加密機(jī)制非常簡單,所以即使數(shù)據(jù)庫設(shè)置了密碼,解密也很容易。該數(shù)據(jù)庫系統(tǒng)通過將用戶輸入的密碼與某一固定密鑰進(jìn)行異或來形成一個加密串,并將其存儲在*.mdb文件中從地址“&H42;” 開始的區(qū)域內(nèi)。由于異或操作的特點是“經(jīng)過兩次異或就恢復(fù)原值”,因此,用這一密鑰與*.mdb文件 的加密串進(jìn)行第二次異或操作,就可以輕松地得到Access數(shù)據(jù)庫的密碼?;谶@種原理,可以很容易地編制出解密程序。
由此可見,無論是否設(shè)置了數(shù)據(jù)庫密碼,只要數(shù)據(jù)庫被下載,其信息就沒有任何安全性可言了。
3.源代碼的安全隱患
由于ASP程序采用的是非編譯性語言,這大大降低了程序源代碼的安全性。任何人只要進(jìn)入站點,就可以獲得源代碼,從而造成ASP應(yīng)用程序源代碼的泄露。
4.程序設(shè)計中的安全隱患
ASP代碼利用表單(from)實現(xiàn)與用戶交互的功能,而相應(yīng)的內(nèi)容會反映在瀏覽器的地址欄中,如果不采用適當(dāng)?shù)陌踩胧?,只要記下這些內(nèi)容,就可繞過驗證直接進(jìn)入某一頁面。
使如在瀏覽器中敲入“……Papg.asp?x=2”,即可不經(jīng)過表單頁面直接進(jìn)入滿足“X=2”條件的頁面。因此,在設(shè)計驗證或注冊頁面時,必須采取特殊措施來避免此類問題的發(fā)生。
二、提高數(shù)據(jù)庫安全性的方法
由于Access數(shù)據(jù)庫加密機(jī)制過于簡單,困此,如何有效地防止Access數(shù)據(jù)庫被下載,就成了提高ASP+Access解決方案安全性的重中之重。
1.非常規(guī)命名法
防止數(shù)據(jù)庫被找到的簡便方法是為Access數(shù)據(jù)庫文件起一個復(fù)雜的非常規(guī)名字,并把它存放在多層目錄下。
例如,對于網(wǎng)上書店的數(shù)據(jù)庫文件,不要簡單地命名為“book.mdb”或“store.mdb”,而是要起一個非常規(guī)的名字,例如faq19jhsvzbal.mdb,再把它放在如./akkjj16t/kjhgb661/acd/avccx55之類的深層目錄下。這樣,對于一些通過猜的方式得到Access數(shù)據(jù)庫文件名的非法訪問方法起到了有效的阻止作用。
2.數(shù)據(jù)庫加密
首先在選取“工具→安全→加密/解密數(shù)據(jù)庫”,選取數(shù)據(jù)庫(如:data.mdb),然后按確定,接著會出現(xiàn)“數(shù)據(jù)庫加密后另存為”的窗口,存為:datal.mdb。接著data.mdb就會被編碼,然后存為datal.mdb。要注意的是,以上的動作并不是對數(shù)據(jù)庫設(shè)置密碼,而只是對數(shù)據(jù)庫文件加以編碼,目的是為了防止他人使用別的工具來查看數(shù)據(jù)庫文件的內(nèi)容。
接下來我們?yōu)閿?shù)據(jù)庫加密,首先以打開經(jīng)過編碼了的datal.mdb,在打開時,選擇“獨(dú)占”方式。然后選取功能表的“工具→安全→設(shè)置數(shù)據(jù)庫密碼”,接著輸入密碼即可。這樣即使他人得到了employerl.mdb文件,沒有密碼他是無法看到data1.mdb的。
加密后要修改數(shù)據(jù)庫連接頁,如:
conn.open “driver={mi-crosoft access driver(*.mdb)};
uid=admin;pwd=數(shù)據(jù)庫密碼;dbq=數(shù)據(jù)庫路徑”
這樣修改后,數(shù)據(jù)庫即使被人下載了,別人也無法打開(前提是你的數(shù)據(jù)庫連接頁中的密碼沒有被泄露)。但如前所述,由于數(shù)據(jù)庫加密機(jī)制比較簡單,只要數(shù)據(jù)庫被下載,其信息安全依然是個未知數(shù)。
3.使用ODBC 數(shù)據(jù)源
在ASP程序設(shè)計中,應(yīng)盡量使用ODBC數(shù)據(jù)源,不要把數(shù)據(jù)庫名直接寫在程序中,否則,數(shù)據(jù)庫將隨ASP源代碼的失密而一同失密。例如:
DBPath=Server.MapPath(“./akkjj16t/kjhg661/acd/avccx55/faq19jhsvzbal.mdb”)
Conn.Open “driver=Microsoft Access Driver(*.mdb);dbq=”
&DBPath;
可見,即使數(shù)據(jù)庫名字起得再怪異,隱藏的目錄再深,ASP源代碼失密后,數(shù)據(jù)庫也很容易被下載下來。如果使用ODBC數(shù)據(jù)源,就不會存在這樣的問題了:
Conn.open “ODBC—DSN名”這種方法的不足之處是如果移動站點目錄的話,需要重新設(shè)置數(shù)據(jù)源。
4.在數(shù)據(jù)庫名稱里加#號
在數(shù)據(jù)庫名前加上一個#號,臺:#Data.Asp。這里的#號并不是用來防止下載的。當(dāng)你有多個MDB文件,并放在同一個目錄下,如果訪問者猜到管理員MDB文件的位置,并且從另一個系統(tǒng)中得到SQL注入漏洞的同時,就可以采用Access跨庫查詢的方法,來取得管理員庫中的記錄。如果我們在庫名前面加上#號的時候,就算被猜測到了也沒有關(guān)系,因為#在SQL語法中有表示日期的作用,語法出錯也就不會去執(zhí)行查詢條件了。
需要注意的是:只要數(shù)據(jù)庫文件名任何地方含有#號,別人都無法正常下載。同理,空格號也可以起到#號作用,但必須是文件名中間出現(xiàn)空格。
5.更改數(shù)據(jù)庫文件名并在數(shù)據(jù)庫中加入ASP代碼字段
這種作法是比較專業(yè)但也是很安全的也是現(xiàn)在比較流行的方法,其正確作法他為兩步:
第一步,在你的MDB文件中建一個表,如NotDownLoad在表中建一個字段,類型為OLE對象,字段名為:<%abcd%>,為什么要取名為<%abcd%>,其實在這里可以隨便輸入,只要不是正確有ASP語句就行了。
第二步,數(shù)據(jù)庫改為“文件名.Asp”。
這樣把擴(kuò)展名改成.ASP后,在IE中輸入的時候,遇到了<%>他就會去解釋之間的代碼,而不正確的ASP語句在解釋時會出現(xiàn)亂碼,所以數(shù)據(jù)庫就不會正確有被下載。
綜上所述,比較安全的數(shù)據(jù)庫就應(yīng)該是#文件名.Asp,并且建一個臨時表,表中有一字段輸入ASP代碼,讓ASP不能被正確的解釋。
注意:上述防止數(shù)據(jù)庫被下載的方法主要針對虛擬服務(wù)器而言。對于托管主機(jī),那就比較簡單了,直接把數(shù)據(jù)庫放在IIS以外的目錄即可防止被下載。例如:WEB目錄在D:\Web\WebSite目錄下,那么就把數(shù)據(jù)庫保存在D:\Web\Data目錄下。
(作者單位:十堰職業(yè)技術(shù)(集團(tuán))學(xué)校 湖北十堰)