在任何社区ASP版转悠过的人,大概在某个时候都会见到这样的问题“asp应用access数据库如何保障数据库不被下载?”
很多人(包括MVP)的答复是,重新命名,把.MDB扩展名改成.ASP。乍看一下,这是个非常聪明的方法,因为换成.ASP扩展名后,IIS就把文件转给ASP.DLL解释去了,好像不能被下载了。
非常简单明了,对吧?
但确实是这么简单么?
首先,这文件还是会被解释,如果你的数据库有几十个M的话,当某个恶意用户试图访问时,系统还是会把文件调进内存,解释一番。
其次,ASP只解释<% ... %> 和 <SCRIPT runat="server">....</SCRIPT> 间的东西,其他的东西还是会原封不动地显示的,如果你在浏览器里看不到什么,看一下源码就知道了。
再次,假如你的某个表里的某个TEXT字段里有类似这样的内容(不可能?假如你的应用里需要用户输入什么文字,你又不过滤输入文字的话,非常有可能的)
<%
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile("ThePathToSomeImportandFileForExampleGlobal.asa")
%>
你觉得恶意用户直接访问该数据库文件时会发生什么?
比较好的答案是在网络服务管理器里把数据库文件或所在目录(假如你的数据库文件们是在某个单独的目录的话)设成不能读/写,但在资源管理器里给予IUSR_机器名(或者你设置的匿名帐户)读/写的权利,参考这个FAQ和How to configure HTTP READ-Protected Folders 。
当然,但愿我是杞人忧天。
打印 | 张贴于 2003-10-18 21:33:00 | Tag:暂无标签
留言反馈
所以改成#DBName.ASP这样应该就可以了吧。
一樣會被下載的。
可不可以用这个比较无聊的办法:给自己的 mdb 文件起一个怪异冗长的文件名,防止被猜测名字而下载?
1、把FileSystemObject的调用名称改掉,不给普通用户使用。
2、MDB数据文件不要放在站点的WEB目录中,比如可以有这样的结构
d:\InetPub\xxx.com\
--wwwroot
--logfile
--datafile
这样,wwwroot可以作为站点根目录,datafile存放Access数据库文件等,logfile放站点日志
如果有思归上面说的那种程序漏洞的话,即时作了上述处理,我想还是很容易泄露数据库位置,还可以通过ASP里的Stream下载……