一、严谨的测试
我从小喜欢物理专业的,虽然最后并没有走上这条道路,但是“大胆假设,小心求证”的严谨思想却使我非常受用,因此我发现了利用Windows缺陷来做防下载中不得不说的一个漏洞。
有篇文章介绍了将数据库文件的名字改为空或者空格(即“.mdb”或“<空格>.mdb”)的形式来防止HTTP下载,在看完文章后我便思考突破下载的方法,终于在原文的截图中发现了文章作者不够严谨的地方,也就是那篇文章中的图。
这个404错误页面显然并不是IIS的,也不像自定义的,而下面提示的“Host By NetBox Versopm 2.8 Build 4128”则表明系统使用的是小旋风ASP服务器,然而这个软件往往用于本地脚本测试,真正的ASP服务器使用的基本上都是IIS.这两款软件有很大的区别,下面我们就来重新测试一下吧。
我搭建了一个Win2003(NTFS分区)+IIS6.0来模拟真实的服务器环境,发现无前缀数据库防下载法并不能发挥作用,不管是空名或者是空格名的文件都可以下载。
二、防止下载的简单方法
那难道就没有可以防下载的方法吗?当然不是,我使用的方法说出来可能会让你大吃一惊,就是把扩展名“.mdb”改为“.ini”,这样就可以防止该文件被下载了。
这样做的原理又是什么呢?浏览器和Web服务器都支持MIME,MIME规定了某种文件及其对应的文件类型和传输及编码方式。那么IIS支持的MIME类型又在哪几呢?我们依次打开“Internet信息服务”一“本地计算机”,点击右键选择“属性”,选择“MIME类型”,就会看到有很多类型的文件都是IIS支持的,其中就有“mdb”,这也就是我们能下载mdb文件的原因。
如果浏览器请求了一个服务器不知道的MIME文件类型,那么浏览器便无法将其传输,就会返回404错误信息,因此删除“.mdb”的MIME类型就可以防止数据库被下载了。如果我们使用的是虚拟空间而无权修改服务器的MIME类型时,可以将数据库改名为任意一个IIS中没有规定的MIME类型,这样就可以防止下载了。比如我发现“.ini”这个文件类型并没有在IIS的MIME类型中,因此将数据库扩展名更为“.ini”就可以有效防止下载。
通过测试,IE、遨游下载工具、火孤、迅雷都无法将其下载,后来我在IIS虚拟空间中也通过了上述的测试。