■ 河南 郭建偉
編者按:暴庫是黑客最常用的手段之一,是黑客通過各種刺探手段窺探數(shù)據(jù)庫文件,并利用其中的敏感數(shù)據(jù)對網(wǎng)站進行攻擊。Access數(shù)據(jù)庫在網(wǎng)站中使用廣泛,如不采取安全措施,網(wǎng)站管理員密碼等敏感信息可被輕易獲取。只有有效保護網(wǎng)站數(shù)據(jù)庫安全,才能讓黑客無功而返。
為防止黑客隨意下載Access數(shù)據(jù)庫,最簡單的方法是在數(shù)據(jù)庫名稱前添加“#23%”前綴(如“#23%test.mdb”)或“23%23%”前綴(如“23%23%test.mdb”),這 樣當下載數(shù)據(jù)庫時,就會顯示“Directoty Listing Denied”的錯誤提示。如果將其名稱更改為“23%#test.mdb”或“##test.mdb”,就會出現(xiàn)“無法找到該頁”提示,這同樣會攔截數(shù)據(jù)庫下載操作。實際上,也可以直接在數(shù)據(jù)庫名稱前加“%”符號,同樣可以起到防下載的作用。
當然,為了保護數(shù)據(jù)庫文件,可以在其名稱前添加更多特殊字符。例如將其更改為“##%%23#test#$$%.mdb”等,如此復雜的名稱格式可讓常用的下載工具視其為非法的URL,這樣即可保護數(shù)據(jù)庫文件安全了。
為防止黑客使用URL加密方式避開上述限制,可以在數(shù)據(jù)庫文件名中間夾雜空格符號。在IIS中可以采用更簡單的更名方式來防御非法下載。例如將“test.mdb”更名為“test.ini”文件,并對“conn.asp”等連接文件中的數(shù)據(jù)庫名稱做同樣修改,當黑客試圖下載這樣的文件時,就會出現(xiàn)無法找到該頁的提示。
對于IIS來說,如果瀏覽器請求了一個服務(wù)器不知道的MIME文件類型。那么瀏覽器就無法將其傳輸給客戶端,并返回404錯誤信息。因此,將“.mdb”的MIME類型刪除就可防止數(shù)據(jù)庫被非法下載。如果您使用的是虛擬空間,無權(quán)更改服務(wù)器MIME類型,可以將數(shù)據(jù)庫更名為任意一個IIS中沒有預設(shè)的MIME類型,就可以起到防止下載的作用。
很多網(wǎng)站采用的是公開的整站程序,數(shù)據(jù)庫路徑是公開的,如果不修改默認路徑,攻擊者可以毫不費力地下載數(shù)據(jù)庫文件。
例如通過在數(shù)據(jù)庫名稱中添加“#”符號或?qū)?shù)據(jù)庫進行加密,可防止非法下載。在數(shù)據(jù)庫連接文件“conn.asp”中添加“on error resume next”語句,防止黑客暴庫。當數(shù)據(jù)庫路徑被黑客發(fā)現(xiàn)后,為避免其下載數(shù)據(jù)庫,可以將數(shù)據(jù)庫文件存放到Web目錄之外的地方。例如,可以在網(wǎng)站目錄外建立一個文件夾,假設(shè)為“f:data”,將原數(shù)據(jù)庫文件移動到該目錄,再將“conn.asp”等連接文件進行修改,其中的數(shù)據(jù)庫路徑更改為新的數(shù)據(jù)庫路徑,如“DataSource= "&Server.mappath("../data/db.mdb")"”等。
因為數(shù)據(jù)庫文件在域網(wǎng)站目錄之外,攻擊者自然無法下載,但該方法對使用虛擬空間網(wǎng)站用戶不適合。為此可以變通解決,例如原數(shù)據(jù)庫文件為“pctest.mdb”,可以更名為“pc%23test.mdb”,之后在“conn.asp”連接文件中修改數(shù)據(jù)庫名稱。這樣就無法下載該數(shù)據(jù)庫。
還可以在數(shù)據(jù)庫目錄下創(chuàng)建名為“pc#test.mdb”的虛假數(shù)據(jù)庫文件,在其中寫入警告信息。當攻擊者利用“http://xxx.xxx.xxx.xxx/shu juku/ pc%23test.mdb”之類網(wǎng)址試圖下載“pc%23test.mdb”文件時,下載的是“pc#test.mdb”這個虛假文件,顯示的是該文件中的警告信息。
為抵御黑客暴庫,可以打開IIS服務(wù)管理器,在IIS屬性窗口中的“主目錄”面板中點擊“配置”按鈕,在應(yīng)用程序配置窗口中點擊“添加”按鈕,在彈出窗口中點擊“添加”按鈕,在“可執(zhí)行文件”欄中輸入“C:Windowssystem32inetsvrasp.dll”,在“擴展名”欄中輸入“.mdb”,選擇“限制為”項,輸入“禁止”。點擊“確定”按鈕保存。當黑客試圖下載數(shù)據(jù)庫時,因為映射解析的作用,服務(wù)器會返回禁止訪問的提示。
此外,還可以采用重定向技術(shù)保護數(shù)據(jù)庫安全。例如在IIS管理器中打開目標網(wǎng)站,選擇其中的數(shù)據(jù)庫文件,右擊“屬性”項,在彈出窗口中選擇“重定向到URL”項,在“重定向到”欄中輸入當前網(wǎng)站的網(wǎng)址(或任意網(wǎng)址)。這樣當訪問該數(shù)據(jù)庫時會自動跳轉(zhuǎn)到重定向地址。
為防止網(wǎng)站數(shù)據(jù)庫以及其他敏感信息不被搜索引擎收錄,可以為“robots.txt”文件建立安全規(guī)則。例如將“robots.txt”中的原有內(nèi)容清空,在其中寫入“Useragent:*”和“Allow:/cgibin/*.htm”兩行內(nèi)容,這樣就實現(xiàn)了只允許訪問“cgibin”目錄下的所有“.htm”類型文件的連接及相關(guān)的子目錄連接,將數(shù)據(jù)庫目錄等敏感內(nèi)容隱藏起來。
利用特殊字符對網(wǎng)站數(shù)據(jù)庫進行探測,是黑客經(jīng)常使用的招數(shù),最簡單有效的方法對“conn.asp”連接文件進行修改。例如,在其中逐行加入“<%”,“Option Explicit”、“Dim”、“Dim db”、“Dim Connstr”、“Db= "data/數(shù)據(jù)庫實際名稱.mdb"”、“ConnStr=”Provider= Microsoft.Jet.OLEDB.4.0;Data Source=”&Server.MapPath(db)”、“On Error Resume Next”、“Set conn = Server.CreateObject(“ADODB.Connection”)”、“conn.open ConnStr”、“If Ree Then”,“err.Clear”、“Ser Conn =Nothing”、“Response.Write =Nothing”、“Response.Write "數(shù)據(jù)庫連接出現(xiàn)異常,請查看提交的數(shù)據(jù)!"”、“Reponse.End”、“End If”、“%>”等語句。這樣就實現(xiàn)了數(shù)據(jù)庫防暴庫功能。當黑客使用上述方法試圖探測網(wǎng)站的數(shù)據(jù)庫真實路徑時,服務(wù)器就會返回“"數(shù)據(jù)庫連接出現(xiàn)異常,請查看提交的數(shù)據(jù)!”的警告信息。
為防止黑客非法下載數(shù)據(jù)庫,最根本的方法還需要從Access數(shù)據(jù)庫本身著手,為其設(shè)置更多的安全措施。
例如,使用Access打開網(wǎng)站數(shù)據(jù)庫,切換到表顯示界面,點擊工具欄上的“新建”按鈕,在彈出窗口中選擇“設(shè)計視圖”項,在表設(shè)計窗口中的第一行中的“字段名稱”列中輸入“nodown”,在“數(shù)據(jù)類型”列中選擇“OLE對象”項,點擊“Ctrl+S”鍵,保存該表,將其名稱設(shè)置為“nodown”。使用記事本創(chuàng)建名為“aaa.txt”的文件,并輸入“<%”。
在數(shù)據(jù)庫中打開上述“nodown”表,在對應(yīng)記錄行中右擊“插入對象”項,在彈出窗口中選擇“由文件創(chuàng)建”項,點擊“瀏覽”按鈕,選擇上述“aaa.txt”文件,得到一個新的名為“包”的記錄。這樣可有效防止數(shù)據(jù)被隨意下載。
對于數(shù)據(jù)庫中的重要表,最好將其隱藏起來,以防止被別人隨意窺視。打開網(wǎng)站數(shù)據(jù)庫,選擇其中需要隱藏的表,在屬性窗口中選擇“隱藏”項即可隱藏。按照同樣方法可以隱藏其他的表。之后點擊菜單“工具”→“選項”項,在選項窗口中的“視圖”面板中取消“隱藏對象”項的選擇狀態(tài),就可以將表徹底隱藏起來了。
為了防止黑客窺視數(shù)據(jù)庫內(nèi)容,可以對數(shù)據(jù)庫進行加密。在Access中點擊菜單“工具”→“安全”→“編碼/解碼數(shù)據(jù)庫”項,在彈出的窗口中選擇網(wǎng)站數(shù)據(jù)庫,之后將其保存為合適的名稱。通過對數(shù)據(jù)庫文件進行編碼操作,可以防止別人使用專用MDB數(shù)據(jù)庫查看器來顯示數(shù)據(jù)庫內(nèi)容。
接下來對數(shù)據(jù)庫進行加密,點擊菜單“文件”→“打開”項,選擇網(wǎng)站數(shù)據(jù)庫,在“打開”按鈕右側(cè)點擊下拉標記,在彈出菜單中選擇“以獨占方式打開”項,打開數(shù)據(jù)庫后,點擊菜單“工具”→“安全”→“設(shè)置數(shù)據(jù)庫密碼”項,輸入復雜的密碼(注意,密碼區(qū)分大小寫),對數(shù)據(jù)庫進行加密處理。
對數(shù)據(jù)庫進行加密后,需要對“conn.asp”等數(shù)據(jù)庫連接文件進行修改,添加和密碼相關(guān)的語句(如“uid=;password-=密 碼”等)。為防止黑客下載數(shù)據(jù)庫,可以對網(wǎng)站目錄中的數(shù)據(jù)庫存放文件夾進行改名,最好將名稱修改的比較復雜(如“database_lemon2015@#$”等)。進入該文件夾,將數(shù)據(jù)庫名稱進行必要的修改,例如在其前面添加“#”符號,將后綴改為“.asp”、“.asa”等,并將其和在數(shù)據(jù)庫中插入“nodown”表的方法配合使用,可以有效提高數(shù)據(jù)庫抗下載的能力。之后對數(shù)據(jù)庫連接文件進行對應(yīng)的修改,將數(shù)據(jù)庫路徑設(shè)置為與上述信息相符即可。
在設(shè)計ASP等網(wǎng)站時,如果有可能,盡量使用ODBC數(shù)據(jù)源,不要將數(shù)據(jù)庫連接密碼顯示在ASP源程序中,不然黑客如果通過各種手段查看了數(shù)據(jù)庫連接文件的話,再復雜的名稱和路徑都會被識破。如果使用ODBC數(shù)據(jù)源,就可以化解上市問題,因為類似于“conn.open "ODBCDSN名"”的連接語句會讓黑客無所適從。