Web实战之四:保护Web服务器数据库

网络整理 - 07-28
随着互联网络的飞速发展,各种各样的大小网站不断涌现,其中,动态的网站以其实用性、多样性占据了绝对的优势。在动态网站中,站长多是以ASP、PHP和JSP脚本为系统架设的。尤其是ASP系统,因其易用性、兼容性等特点而深受站长们的青睐。

    架设ASP的Web服务器通常是“IIS+ASP+ACCESS”的组合,正是因为这种组合的普遍性,由此引发的安全问题得到越来越多的网管们的关注。

    这里介绍一种方法,通过保护web服务器数据库来消除安全隐患。

  安全威胁

    ◆技术背景

    一般情况下,基于ASP构建的网站程序和论坛的数据库的扩展名默认为.mdb,这是很危险的。

    入侵者只要猜测出数据库文件的位置,然后在浏览器的地址栏里面输入它的URL,就可以轻易地下载文件。就算我们对数据库加上了密码,并且里面管理员的密码也被MD5加密,被下载到本地以后也很容易被破解。毕竟,目前MD5已经可以通过暴力来破解了。

    因此,只要数据库被下载了,那么它就没有丝毫安全性可言。

    ◆攻击方法

    通常情况下,要想知道数据库文件的位置,除了猜测之外,还有一种暴库的方法,就是把站点URL的最后一个“/”改为%5C就能暴出站点数据库。

    例如,把:/detail.asp?id=l 替换为:http://sample.com/support%5Cdetail.asp?id=l

    如果服务器存在安全漏洞,浏览器就会报错:

    Microsoft JET Database Engine(Ox8OOO4OO5)
‘E:\webroot\asproot\db\webdb.mdb’不是一个有效的路径,确定路径名称拼写是否正确,以及是否连接刭文件存放的服务器。

     /support/ConnectDB.asp,第5行
    通过上述错误提示,入侵者就可以轻松地判断出数据库的位置,只需要在浏览器中输入http://sample.com/support/db/webdb.mdb,就可以轻松下载该网站的数据库。

    ◆威胁防治

    为什么把站点URL的最后一个“/”改为%5C就能暴出站点数据库呢?要明白这一点,首先要知道%5C代表的是什么。%5C其实就是16进制代码中的“\”,但如果我们直接在浏览器中提交“\”,IE会自动把“\”转换为“/”,而提交“%5C”是不会被转换的。

    为什么遇到“\”就能暴出数据库呢?因为使用“\”会产生绝对路径错误,使IIS报错,这个报错信息就泄露了站点数据库的位置。恶意攻击者就可以凭此猜测数据库的位置和名称、%5C暴库甚至下载数据库。

    那么,我们该如何防止这类事情发生呢?

   (1)防止入侵者通过简单的猜测而得到数据库的位置。可以把数据库存入深层目录下,取复杂的数据库名称。例如:webroot/mulu1/mulu2/mulu3/rbx9xu5.mdb。

    (2)防止入侵者使用%5C暴库。

    ◆配置IIS服务器,使其不显示暴库的错误信息。处理该错误的HTTP错误编号是500,子错误代码:100。新建一个Error.htm,使错误处理指向该网页。

    ◆在数据库连接文件中添加容错语句。

    例如:下面的connect.asp连接数据库文件,在第一行添加容错语句。如果程序执行出
现错误,就会自动跳过去执行,不会提示错误信息,暴出数据库的位置。
<%
On error resume next’添加这行容错语句,就不会暴出数据库的位置了。
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数据源,配置ODBC数据源
connect.asp连接数据库文件更改为:
<%
Set conn=server.createobject(“adodb.Connection”)
Conn.Open"test" ‘test为数据源名称
%〉
这样即使出错,也不会暴露数据库的位置了。
(3)防止数据库被下载

    ◆更改数据库文件的存储位置到Web根目录之外。

    例如:原数据库存储位置在E:\webroot\asproot\support\db,这里asp站点的根目录是:E: webroot\asproot。我们可以把数据库文件放到:E\webroot\aspdb下面,连接数据库的文件改为:
<%
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暴库,根本就没有报错。

    ◆添加应用程序扩展名映射

    通过修改IIS配置实现,这个方法笔者认为是目前最好的。只要修改一处,整个站点的
数据库都可以防止被下载。无须修改代码,即使暴露目标地址也可以防止下载。即使再输入地址:httP://sample.Com/support/db/webdb.mdb,数据库也不能被下载了。

    以上方法都是笔者在工作中通过实践以及测试总结出的比较有效的方法。实际配置中综合使用会使服务器更安全。