虚拟主机用户access数据库防下载方法
目前使用asp+access架设的网站特别多,防止access数据库被下载是很多人关心的问题。 以下是比较常见的方法: 1.给数据库文件起一个复杂的名字,放在多层目录下。 2.mdb文件后缀名改为asp,里面加一个常说的nodown表。 3.数据库名前加"#"。 4.加密数据库。 5.数据库放在WEB目录外。 6.使用ODBC数据源。 大家到百度搜索“防止ACCESS数据库被下载的9种方法”,可以看到详细文章。 笔者认为上面的2,5,6三种方法才是行之有效的方法。
其实,虚拟主机的用户完全不必为这个问题烦恼。 虚拟主机一般提供了wwwroot,databases目录,wwwroot目录下所有文件可以通过WEB访问,而databases目录不能。很多人只是简单的把所有代码包括mdb文件放到wwwroot下,这样mdb文件是可以通过WEB访问的,不管你用什么另类的方法去保护它,它都是处于危险之中的。这时,请别忘了databases目录。
下面是我们常用的连接access数据库的代码。 =============================================
<% dim dbPath,conn,connStr dbPath=Server.MapPath("data/data.mdb") '取得mdb文件物理路径。 Set conn = Server.CreateObject("ADODB.Connection") connStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&dbPath conn.open connStr %>
============================================= 当我们把mdb文件放在databases目录下时,dbPath就不能通过Server.MapPath()来取得了,直接用真实路径即可。 如:dbPath="D:\wwwroot\yourUserName\databases\data.mdb"。 大家可以通过输出Server.MapPath("某个文件"),来取得真实路径。
下面给出通用的代码:
<% dim rootdir,myLocation,dbPath,conn,connStr rootdir = Request.ServerVariables("APPL_PHYSICAL_PATH") '返回当前web application的物理路径,如:"D:\wwwroot\yourUserName\wwwroot\" myLocation=inStrRev(rootdir,"\",Len(rootdir)-1) '取得倒数第二个\的位置。 dbPath=Mid(rootdir,1,myLocation)+"databases\data.mdb" '拼接字符串,得到mdb文件物理路径。
On Error Resume Next '开启容错机能,发生错误后继续执行。 set conn = Server.CreateObject("ADODB.Connection") connStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&dbPath conn.open connStr if Err.Number <> 0 then '如果有错误发生 response.write "<b>提示:</b>建立数据库连接错误,请联系管理员。" conn.close set conn=nothing response.end end if %>
大家要修改的只是data.mdb的文件名,另外,上面的代码还可以解决%5C暴库的问题。
|