当前位置: 首页 > 科教园地 > 技术资料
ACCESS数据库防止被下载的方法汇总
时间:2011-08-28

用access做数据库的站还是不少的。如果数据库文件被下载是一件很危险地事情,那么我们要如何处理才能防止下载呢?本文对自己所知道的方法和网上找到的一些方法做了汇总。

一般来说,ACCESS数据库之所以被下载,是因为自己的ACCESSD数据库路径和文件名被暴露出来了。人家得到你数据库路径和文件名的方法一般来说是这样:
1。凭经验或是利用程序猜测ACCESS文件路径和名称。因为程序员的习惯,他们往往把数据库直接放到data,mdb,database等这些文件夹里,或者直接放在根目录下并命名为data.mdb,害得那些投机取巧的人在毫不费智商的情况就猜到了,真是郁闷。再一个就是有些人会利用服务器默认的404错误,编写专门的猜测数据库的程序。无论你的名字取得有多怪异,现在计算机运算速度那么快,几分钟就猜出来了。
2。ASP数据连接文件源码泄露。一般来说,这个数据连接文件取名为conn.asp。如果这个文件里的源码被人家拿到了,数据库文件的路径写得是清清楚楚,就好比你在街上裸奔,别人想看你哪里就看哪里。已经有个漏洞可以爆数据库路径,现在应该是堵上了。
3。用特殊请求让脚本解析出错,通过服务器返回来的信息得到数据库路径和文件名。
因此,有的朋友就针对以上的情况,做了一些防范的措施。看看你自己是不是这样做的:
1。修改路径与文件名。如修改成:fdasjk/gj484re/df83327df!%@d8ewf.mdb
2。修改数据库后缀.mdb为.asa或者.asp格式。因为IIS会对.asa或.asp的文件作解析,通过IE返回来的信息为一堆乱码!但是,人家用flashget等下载工具照样可以把它下载下来,然后把扩展名改成.mdb,照样知道你的秘密了。
3。在数据库文件名前面加#防止下载。或者在文件名中保留一些空格。原理是这样的:IIS在处理#特殊符号时会跳过不处理,只识别#前面的部分,后面的统统抛弃了,所以你在地址栏里键入http://www.*****.com/#test.mdb时,IIS只当作http://www.*****.com/处理了,你还下载什么呀?  但是!如果遇到了比如像我这样的有点了解IE编码技术的人,只要把#换成UTF-8编码照样可以下你的数据库。例如:# 在UTF-8编码编码中是 %23 ,这是我只要在地址栏里输入http://www.*****.com/%23test.mdb时,就直接下了。
4。用加密数据库文件的方法。 ACCESS数据库的加密机制很脆弱的,不堪一击!常用的解密工具ACCESSKEY.EXE,轻松就扒了你的皮。

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文件,实现本地也不能下载!