在任何社区ASP版转悠过的人,大概在某个时候都会见到这样的问题“asp应用access数据库如何保障数据库不被下载?”
很多人(包括MVP)的答复是,重新命名,把.MDB扩展名改成.ASP。乍看一下,这是个非常聪明的方法,因为换成.ASP扩展名后,IIS就把文件转给ASP.DLL解释去了,好像不能被下载了。
非常简单明了,对吧?
但确实是这么简单么?
首先,这文件还是会被解释,如果你的数据库有几十个M的话,当某个恶意用户试图访问时,系统还是会把文件调进内存,解释一番。
其次,ASP只解释<% … %> 和 …. 间的东西,其他的东西还是会原封不动地显示的,如果你在浏览器里看不到什么,看一下源码就知道了。
再次,假如你的某个表里的某个TEXT字段里有类似这样的内容(不可能?假如你的应用里需要用户输入什么文字,你又不过滤输入文字的话,非常有可能的)
<%
Dim fso
Set fso = CreateObject(“Scripting.FileSystemObject”)
fso.DeleteFile(“ThePathToSomeImportandFileForExampleGlobal.asa”)
%>
你觉得恶意用户直接访问该数据库文件时会发生什么?
比较好的答案是在网络服务管理器里把数据库文件或所在目录(假如你的数据库文件们是在某个单独的目录的话)设成不能读/写,但在资源管理器里给予IUSR_机器名(或者你设置的匿名帐户)读/写的权利,参考这个FAQ和How to configure HTTP READ-Protected Folders 。
当然,但愿我是杞人忧天。