随着互联网的发展,现在几乎所有的中小型企业或者个人都架设了自己的网站,假如你做的是一个动态的网站,数据库理所当然成了一个站点的核心文件。一旦数据库被人下载,极有可能被恶意人士破坏网站。或者窃取资料。基于目前中小型企业或者个人有好多采用asp+access架构来做站,下面谈一谈access数据库防下载的方法以及方法的漏洞,仅供菜鸟参考。
1、修改为复杂的数据库文件名
修改数据库文件名,其目的就是防止被猜到数据库文件名而被下载. 但是攻击者通常会利用IE的漏洞来窃取你的数据库路径,所以该方法并不安全。
2、将数据库名后缀改为ASA、ASP等
将数据库名后缀改为ASA、ASP等,不一定能防止被下载。攻击者知道数据库路径后,可以利用flashget等工具直接下载再改名,所以该方法也不安全。
3、数据库名前加“#”
数据库名前加“#”,不一定能防止被下载。有些人误认为:“只需要把数据库文件前名加上#就可以了。”这种加“#”号其原理是下载的时候只能识别#号前名的部分,对于后面的自动去掉。这种相对来说是比较安全的,但只对低水平的菜鸟有效,因为他们不知道,也没有去了解有关IE编码的技术。在编码中我们用%23来代替#号。
4、对数据库进行加密
有些人认为把ACCESS数据库进行加密,就算得到数据库他也没有办法得到里面的任何信息。呵呵,这是一种错解,Access数据库的加密机制是非常脆弱的,加密后数据库系统通过将用户输入的密码与某一固定密钥进行“异或”来形成一个加密串,并将其存储在*.mdb文件从地址“&H42”开始的区域内.用程序可以轻松的写出破解代码.网上早已经有这样的程序了。
下面提供一个我收集的ACCESS数据库防下载的相对安全的方法。首先在数据库中加上一个NotDownLoad的表。
下面一个NotDownLoad表建立的小程序,我们首先来新建一文本文件,输入下面代码。
<% db="Databass/Database.asp" '这里改成你的数据库地址,这是相对根目录的地址 set conn=server.createobject("Adodb.Connection") connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db) conn.open connstr conn.execute("create table notdownload(notdown oleobject)") set rs=server.createobject("adodb.recordset") sql="select * from notdownload" rs.open sql,conn,1,3 rs.addnew rs("notdown").appendchunk(chrB(asc("<")) & chrB(asc("%"))) rs.update rs.close set rs=nothing conn.close set conn=nothing %>
输入后保存为一个asp文件,比如NotDownLoad.asp,然后我们上传到服务器根目录下,然后运行NotDownLoad.asp这个文件,运行完后NotDownLoad.asp就可以从服务器中删除了。
这样,就算别人知道你的数据库地址,用迅雷、快车之类的工具也下载不了。当然为了安全,我们还得在数据库名前加上一个#号。这里的#号并不是用来作防止下载的,而是防止被猜到管理员数据库文件的位置,从另一个系统中得到SQL注入漏洞的采用ACCESS跨库查询的方法来取得管理员库中的记录。而我们在数据库名前面加上#号的时候,就算你猜到了,我们也不怕你提交如:select * from d:\web\data\#data.asp.admin sql查询语句,系统会提示出错。因为#在SQL语法中有表示日期的作用,语法出错也就不会去执行查询条件了。
下面总结一下,我认为比较安全的数据库就应该是#文件名.Asp 并且建一个NotDownLoad表,表中有一字段输入ASP代码,让ASP不能被正确的解释。虚拟主机用户把数据库放在专门的数据库目录中,不要放在程序目录中。
当然你如果有服务器控制权限,在ASP等程序设计中,应尽量使用ODBC数据源,也可以添加数据库名的如MDB的扩展映射来达到隐藏的目的。基于ASP的安全性,随着.net技术的发展。ASP用户如果有条件建议将程序升级到.NET最好。当然没有绝对的安全,要安全还需要网站管理员平时注意一些系统的安全,以及写ASP/ASP.NET/PHP/JSP代码本身的安全,否则依然是有可能被人下载或者修改数据库的!