原來改mdb為asp就能防下載是鬼話。用Flashget試驗下載data.asp文件,並另存為data.mdb文件,發現用ACCESS開啟完好無損! 1.發揮你的想像力修改資料庫檔名
但是若攻擊者透過第三方途徑獲得了資料庫的路徑,就可以下載資料庫。故保密性為最低。
2.資料庫名稱後綴改為ASA、ASP等
此法須配合一些要進行一些設置,否則就會出現本文開頭的那種情況
(1)二進位字段添加。
(2)在這個檔案中加入<%或%>,IIS就會依照ASP語法來解析,然後就會報告500錯誤,自然不能下載了。可是如果只是簡單的在資料庫的文字或備註欄位加入<%是沒用的,因為ACCESS會對其中的內容進行處理,在資料庫裡他會以< %的形式存在,無效!正確的方法是將<%存入OLE物件欄位裡,這樣我們的目的就能達到了。
作方法:
首先,用notepad新建一個內容為<% 的文字文件,隨便取個名字存檔。
接著,用Access打開您的資料庫文件,新建一個表,隨便起個名字,在表中添加一個OLE對象的字段,然後添加一個記錄,插入之前建立的文本文件,如果操作正確的話,應該可以看到一個新的名為資料包"的記錄。即可
3.資料庫名前加#
只要要把資料庫檔案前名加上#、然後修改資料庫連線檔案(如conn.asp)中的資料庫位址。原理是下載的時候只能辨識#號前名的部分,對於後面的自動去掉,例如你要下載:http://www.pcdigest.com/date/#123.mdb (假設存在的話)。無論是IE或FLASHGET等下到的都是http://www.test.com/date/index.htm(index.asp 、default.jsp等你在IIS設定的首頁文件)
另外在資料庫檔案名稱中保留一些空格也起到類似作用,由於HTTP協定對位址解析的特殊性,空格會被編碼為%,如http://www.test.com/date/123 ;456.mdb ,下載的時http://www.test.com/date/123 %456.mdb。而我們的目錄就根本沒有123%456.mdb這個文件,所以下載也是無效的這樣的修改後,即使你暴露了資料庫地址,一般情況下別人也是無法下載!
4.加密資料庫
首先在選取工具->安全性->加密/解密資料庫,選取資料庫(如:employer.mdb),然後接確定,接著會出現資料庫加密後另存為的窗口,存為:employer1.mdb。接著employer.mdb就會被編碼,然後存為employer1.mdb..要注意的是,以上的動作並不是對資料庫設定密碼,而只是對資料庫檔案加以編碼,目的是為了防止他人使用別的工具來查看資料庫檔案的內容。
接下來我們為資料庫加密,首先以開啟經過編碼了的employer1.mdb,在開啟時,選擇獨佔方式。然後選取功能表的工具->安全性->設定資料庫密碼, 接著輸入密碼即可。這樣即使他人得到了employer1.mdb文件,沒有密碼他是無法看到employer1.mdb的。
加密後要修改資料庫連線頁, 如:
conn.open driver={microsoft access driver (*.mdb)};uid=admin;pwd=資料庫密碼;dbq=資料庫路徑
這樣修改後,資料庫即使被人下載了,別人也無法開啟(前提是你的資料庫連線頁中的密碼沒有被外洩)
但值得注意的是,由於Access資料庫的加密機制比較簡單,即使設定了密碼,解密也很容易。此資料庫系統透過將使用者輸入的密碼與某一固定金鑰進行異或來形成加密字串,並將其儲存在*.mdb檔案從位址&H42開始的區域內。所以一個好的程式設計師可以輕鬆製作一個幾十行的小程式就可以輕鬆地取得任何Access資料庫的密碼。因此,只要資料庫被下載,其資訊安全仍是個未知數。
5.資料庫放在WEB目錄外或將資料庫連接檔放到其他虛擬目錄下
如你的WEB目錄是e:/webroot,可以把資料庫放到e:/data這個資料夾裡,在e:/webroot裡的資料庫連線頁修改資料庫連線位址為:../data/資料庫名稱的形式,這樣資料庫可以正常調用,但是無法下載的,因為它不在WEB目錄裡!這個方法一般也不適合購買虛擬空間的使用者。
6.使用ODBC資料來源。
在ASP等程式設計中,如果有條件,應盡量使用ODBC資料來源,不要把資料庫名稱寫在程式中,否則,資料庫名稱會隨ASP原始碼的失密而一同失密,例如: DBPath = Server.MapPath(. ./123/abc/asfadf.mdb )
conn.open driver={Microsoft Access Driver (*.mdb)};dbq=& DBPath
可見,即使資料庫名字起得再怪異,隱藏的目錄再深,ASP原始碼失密後,也很容易被下載下來。如果使用ODBC資料來源,就不會存在這樣的問題了: conn.open ODBC-DSN名,不過這樣是比較煩的,目錄移動的話又要重新設定資料來源了,更方便的方法請看第7, 8法!
7.新增資料庫名稱的如MDB的擴充映射
這個方法就是透過修改IIS設定來實現,適合有IIS控制權的朋友,不適合購買虛擬主機使用者(除非管理員已經設定了)。這個方法我認為是目前最好的。只要修改一處,整個網站的資料庫都可以防止被下載。無須修改程式碼即使暴露目標位址也可以防止下載。
我們在IIS屬性---主目錄---配置---映射---應用程式擴充那裡新增.mdb檔案的應用解析。注意這裡的選擇的DLL(或EXE等)似乎也不是任意的,選擇不當,這個MDB檔案還是可以被下載的, 注意最好不要選擇選擇asp.dll等。你可以自己多測試下
這樣修改後下載資料庫如: http://www.test.com/data/dvbbs6.mdb 。就出現(404或500等錯誤)
8:使用.net的優越性
動網的木鳥就寫過一個防非法下載檔案的WBAL 防盜鏈工具。具體可以登陸http://www.9seek.com/WBAL/ ;
不過那個只實現了防止非本地下載的,沒有起到真正的防下載資料庫的功能。不過這個方法已經跟5法差不多可以透過修改.NET文件,實現本地也不能下載!
這幾個方法中,只有第7和8個是統一性改的,一次修改配置後,整個站點的數據庫都可以防止下載,其他幾個就要分別修改數據庫名和連接文件,比較麻煩,不過對於虛擬主機的朋友也只能這樣了!
其實第6個方法應該是第5個方法的擴展,可以實現特殊的功能,但對於不支援.net的主機或者怕設定麻煩的話,還是直接用第5個方法了,而且預設情況下第6個方法,依然可以透過複製連接到同主機的論壇或留言本發表,然後就可以點擊下載了(因為這樣的引用頁是來自同主機的)
9.利用NTFS分割區的檔案權限設定(by percyboy)
我們已經知道,ASP.NET 中使用ADO.NET 存取資料庫,透過OleDb 的連接可以存取Access 資料庫-我們非常常用的低端資料庫之一。本文討論了ASP.NET 中可能看到的若干錯誤提示,從中看到Access 2000 和Access XP 建立的資料庫文件,在存取出現錯誤時會出現不太相同的錯誤提示。希望對大家有幫助。另一個重點是,希望透過此文,讓大家對ASP.NET 中Access 資料庫檔案的NTFS 權限設定有所新的認識。