今天下午,低一度博客受到攻擊了,出現了大約一個小時的訪問異常。慶幸的是,這幫無恥歹徒沒能成功獲取我的Access數據庫,而只是象征性地給我 注入了一些東西。也不知道他們是怎樣注入的!想想的確不容小視這幫混蛋!不過沒關系,低一度的數據庫目前足夠安全。利用這個“機會”,我們就來談一談這個 問題。
大家都知道,Asp程序使用得最多的數據庫類型就是Access,如PJ-Blog、Z-Blog等。這是因為Access數據庫簡單小巧,直接上 傳到服務器上就可以用了。盡管簡便,然而Access也有不足之處,其中比較傷腦筋的便是其安全性問題。大部分黑客攻擊此類ASP站點,就是從獲取 Access數據庫開始的。所以,怎樣有效防范Access數據庫被惡意下載,成了建站中首當其沖的話題。這裡,低一度結合自己的經驗、實例及一些網上搜 羅來的資料,向大家介紹幾種相對有效的防范措施,希望對大家會有幫助(當然,用不著最好)。
防范措施一:將數據庫文件名命名得盡可能地復雜
這是最最偷懶的方法了!所以,這個法子的安全指數也並非最高。若攻擊者通過第三方途徑獲得了數據庫的路徑,你就玩完了。比如說我本來只能拿到 list權,結果意外看到了你的數據庫路徑,那我便可冠冕堂皇地把數據庫下載回去研究了。另外,數據文件通常大小都比較大,取再隱蔽的文件名也瞞不了人。 呵呵,所以此法我並不提倡。
防范措施二:修改數據庫名後綴為Asa或ASP等格式
這一做法,安全指數相對第一種行為會高一些,但同樣存在著隱患。它必須配合一些必要的設置進行,如:在數據庫文件中加入<%或%>標 簽,這樣,IIS才會按ASP語法來解析,然後報告500錯誤,使歹徒無法下載。可是,假如只是簡單地在數據庫的文本或備注字段中加入<%是起不到 作用的,因為Access會對其中的內容進行處理,在數據庫裡它會以< %的形式存在,無效哦!正確的方法應該是將<%存入OLE對象字段裡,這樣我們的防范目的才能達到。
操作方法如下: 先用notepad新建一個內容為“<%”的文本文件,然後隨便取個名字存檔。接著,用Access打開 你的數據庫文件,新建一個表,隨便取個什麼名字,然後在表中添加一個OLE對象的字段,並添加一條記錄,插入之前建立的文本文件,要是操作正確,便可以看 到一個新的名為“數據包”的記錄。可以了!
防范措施三:在數據庫名稱前加上“#”等特殊符號
在數據庫文件名之前加上“#”等特殊符號、然後修改數據庫連接文件(如c_custom.ASP)中的數據庫地址,也可以起到不錯的保 護作用。原理是:當歹徒下載的時候,浏覽器或下載工具將只能識別“#”符號前的部分地址,而對於“#”後面的名將自動去除。舉個例子,假設你要下載:http://www.update8.com/date/#123.mdb(如果存 在的話),當你輸入該地址回車,此時無論是IE還是Flashget等,下載到的將都是http://www.yindaoxian.com/date /index.htm(index.ASP、default.JSP等你在IIS設置的首頁文檔)。
另外,在數據庫文件名中保留一些空格也能起到類似作用,由於Http協議對地址解析的非凡性,空格會被編譯為“%”,比如你要下載:http://www.update8.com/date/123 456.mdb(123與456之間是個空格),當你輸入該地址回車,此時你下載到的將是http://www.update8.com/date/123%456.mdb。 而我們的目錄中,根本就沒有123%456.mdb這個文件,所以下載也是無效的。經過這樣的修改以後,即使你暴露了數據庫地址,一般情況下別人也無法下 載得到。所以,這項措施的安全指數較之前兩法,有更高了一籌。
防范措施四:為你的Access數據庫加密
選取“工具-》安全-》加密/解密數據庫,選取數據庫(如:ABC.mdb)”,然後按確定,接著會出現“數據庫加密後另存為”的窗口,另存 為:ABC1.mdb,接著原數據庫ABC.mdb就會被編碼,然後另存為ABC1.mdb。注意,以上動作並不是對數據庫設置密碼,而是對數據庫文件加 以編碼,目的是為了防止他人使用查看工具來查閱數據庫文件中的內容。接下來的操作是:首先打開經過編碼了的ABC1.mdb,在打開時,選擇“獨占”方 式。然後選取功能表中的“工具-》安全-》設置數據庫密碼”, 接著輸入密碼即可。這樣即使他人得到了ABC1.mdb文件,沒有密碼也是無法看到ABC1.mdb的。最後,記得加密完要同步修改數據庫連接文件哦!
一點小說明:由於Access數據庫的加密機制相對簡單,即使設置了密碼,解密也很輕易。只要數據庫被下載了,其信息安全依然是個未知數。所以,此 法也不是最佳。
防范措施五:將數據庫放在Root目錄以外或將數據庫連接文件放到其他虛擬目錄下
這個方法是低一度目前正在使用的,強烈推薦之。比方說,你的WEB目錄是 D:\wwwroot,那麼你可以將數據庫放到D:\databases這個文件夾裡,然後修改D:\wwwroot裡的數據庫連接文件,將數據庫連接地 址修改為:“../databases/數據庫名” 的形式,這樣數據庫也可以正常調用,但是就無法下載了,因為它不存在於wwwroot目錄裡!這個方法一般不適合於購買虛擬主機的用戶。當然,現在的多數 虛擬主機程序在wwwroot目錄平行位置,已經都有獨立的databases目錄了,這樣子處理後相對來說是最安全的。因為在http環境下,根本沒有 url可以指向這個目錄。除非黑了整台主機!
防范措施六:學會使用ODBC數據源。
在ASP等程序設計中,假如技術條件允許,應當盡量使用ODBC數據源,不要將數據庫名寫進程序中,否則,數據庫名將跟隨ASP源代碼一同失密,即 使你的數據庫名字起得再怪異,隱藏的目錄再深,也可能很輕易被下載下來。假如使用了ODBC數據源,就不會存在這樣的問題了:conn.open “ODBC-DSN名” ,不過這樣是比較繁瑣的,目錄移動的話就要重新設置,更方便的方法請看下面吧!使用ODBC數據源處理的結果有一點不好,就是效率很低,速度會變慢,遷移 也不方便。因此雖然安全,也不提倡。
防范措施七:添加數據庫名的擴展映射
這個方法就是通過修改IIS設置來實現的,適合有IIS控制權的同學使用,不適合購買虛擬主機的用戶(除非技術已經設置了)。但這個方法我認為是目 前最好最可靠的。只要修改一處,整個站點的數據庫都可以防止被下載,而無須修改代碼,即使暴露目標地址也無妨。
操作:在“IIS屬性——主目錄——配置——映射——應用程序擴展”那裡添加如.mdb文件的應用 解析。注意,這裡的選擇的DLL(或EXE等)似乎也不是任意的,選擇不當,這個MDB文件還是可以被下載的,最好不要選擇ASP.dll等。你可以自己 多測試幾下。經過這樣的修改後,下載數據庫如:http://www.update8.com/data/123.mdb,就會出現 404或500等錯誤。
防范措施八:懂得利用.Net的優越性
動網的木鳥就寫過一個防非法下載文件的“WBAL防盜鏈工具”。不過它只實現了防非本地下載的,沒有起到真正的防下載數據庫的功能。但這個方法已經 跟措施五差不多,可以通過修改.Net文件,實現本地也不能下載!
最後總結:
這幾個措施中,只有七和八是統一性改的,一次修改配置後,整個站點的數據庫都可以防下載,其他的幾個 措施就要分別修改數據庫名和數據庫連接文件了,比較麻煩,不過對於使用虛擬主機的朋友而言,也只能這樣了!另外,其實第六個措施應該是第五個措施的擴展, 可以實現非凡的功能,但如果對不支持.Net的主機或怕設置麻煩的人而言,還是直接用第五種措施好了。OK,就這些吧!