通過上述錯誤提示,入侵者就可以輕松地判斷出數(shù)據(jù)庫的位置,只需要在瀏覽器中輸入http://sample.com/support/db/webdb.mdb,就可以輕松下載該網(wǎng)站的數(shù)據(jù)庫。
威脅防治
為什么把站點URL的最后一個“/”改為%5C就能暴出站點數(shù)據(jù)庫呢?要明白這一點,首先要知道%5C代表的是什么。%5C其實就是16進制代碼中的“\”,但如果我們直接在瀏覽器中提交“\”,IE會自動把“\”轉(zhuǎn)換為“/”,而提交“%5C”是不會被轉(zhuǎn)換的。
為什么遇到“\”就能暴出數(shù)據(jù)庫呢?因為使用“\”會產(chǎn)生絕對路徑錯誤,使IIS報錯,這個報錯信息就泄露了站點數(shù)據(jù)庫的位置。惡意攻擊者就可以憑此猜測數(shù)據(jù)庫的位置和名稱、%5C暴庫甚至下載數(shù)據(jù)庫。
那么,我們該如何防止這類事情發(fā)生呢?
(1)防止入侵者通過簡單的猜測而得到數(shù)據(jù)庫的位置??梢园褦?shù)據(jù)庫存入深層目錄下,取復(fù)雜的數(shù)據(jù)庫名稱。例如:webroot/mulu1/mulu2/mulu3/rbx9xu5.mdb。
(2)防止入侵者使用%5C暴庫。
配置IIS服務(wù)器,使其不顯示暴庫的錯誤信息。處理該錯誤的HTTP錯誤編號是500,子錯誤代碼:100。新建一個Error.htm,使錯誤處理指向該網(wǎng)頁。
在數(shù)據(jù)庫連接文件中添加容錯語句。
例如:下面的connect.a(chǎn)sp連接數(shù)據(jù)庫文件,在第一行添加容錯語句。如果程序執(zhí)行出
現(xiàn)錯誤,就會自動跳過去執(zhí)行,不會提示錯誤信息,暴出數(shù)據(jù)庫的位置。
<%
On error resume next’添加這行容錯語句,就不會暴出數(shù)據(jù)庫的位置了。
set conn=server.createobject(“adodb.Connection”)
CS=“Provider=Microsoft.jet.OLEDB.4.0;Data Source=”
conn.ConnectionString=CS&Sever.MapPath(“db/netcenter.asp”)
Conn.open
%>
使用ODBC數(shù)據(jù)源,配置ODBC數(shù)據(jù)源
connect.a(chǎn)sp連接數(shù)據(jù)庫文件更改為:
<%
Set conn=server.createobject(“adodb.Connection”)
Conn.Open”test” ‘test為數(shù)據(jù)源名稱
%〉
這樣即使出錯,也不會暴露數(shù)據(jù)庫的位置了。
(3)防止數(shù)據(jù)庫被下載
更改數(shù)據(jù)庫文件的存儲位置到Web根目錄之外。
例如:原數(shù)據(jù)庫存儲位置在E:\webroot\asproot\support\db,這里asp站點的根目錄是:E: webroot\asproot。我們可以把數(shù)據(jù)庫文件放到:E\webroot\aspdb下面,連接數(shù)據(jù)庫的文件改為:
<%
Set conn=server.createobject(“adodb.connection”)
CS=“Provider=Microsoft.jet.OLEDB.4.0;DataSource=”
Conn.ConnectionString=CS&Server:MapPath(“…//db/netcenter.asp”)
Conn.Open
%〉
這樣更改之后,再用%5C暴庫,根本就沒有報錯。
添加應(yīng)用程序擴展名映射
通過修改IIS配置實現(xiàn),這個方法筆者認為是目前最好的。只要修改一處,整個站點的
數(shù)據(jù)庫都可以防止被下載。無須修改代碼,即使暴露目標地址也可以防止下載。即使再輸入地址:httP://sample.Com/support/db/webdb.mdb,數(shù)據(jù)庫也不能被下載了。
以上方法都是筆者在工作中通過實踐以及測試總結(jié)出的比較有效的方法。實際配置中綜合使用會使服務(wù)器更安全。