引子 昨天和animator试验了一下,把data.mdb文件改名为data.asp文件后放在wwwroot目录里。然后在IE中输入data.asp路径后,发现IE显示一片空白,右键->察看源文件,跳出记事本,将内容另存为.mdb文件,用ACCESS打开,发现需要密码,也就是说至少文件头被破坏。 然后用Flashget试验下载data.asp文件,并另存为data.mdb文件,发现用ACCESS打开完好无损!!!看来,好一些编程人员在开发的时候都认为,改了mdb后缀为asp就能防下载的概念,是错的!后台数据库被下载对于一个asp+access的网站来说无疑是一场惨绝人寰的灾难。飞飞,Asp技术乐园今天找了各方的文章,归纳一下有以下9种办法防止数据库被下载(欢迎补充): 1、发挥你的想象力 修改数据库文件名 不用说,这是最最偷懒的方法,但是若攻击者通过第三方途径获得了数据库的路径),就玩完了。比如说攻击者本来只能拿到list权,结果意外看到了数据库路径,就可以冠冕堂皇地把数据库下载回去研究了。另外,数据文件通常大小都比较大,起再隐蔽的文件名都瞒不了人。故保密性为最低。飞飞Asp技术~乐园
AcOol PS:这个不用说,会用IE的都能下载到。
|
2、数据库名后缀改为ASA、ASP等 此法须配合一些要进行一些设置,否则就会出现本文开头的那种情况 (1)二进制字段添加(此招我还没有炼成-_-+)。飞飞@Asp技术乐园 (2)在这个文件中加入<%或%>,IIS就会按ASP语法来解析,然后就会报告500错误,自然不能下载了。可是如果只是简单的在数据库的文本或者备注字段加入<%是没用的,因为ACCESS会对其中的内容进行处理,在数据库里他会以< %的形式存在,无效!正确的方法是将<%存入OLE对象字段里,这样我们的目的就能达到了。 操作方法: 首先,用notepad新建一个内容为 <% 的文本文件,随便起个名字存档。 接着,用Access打开您的数据库文件,新建一个表,随便起个名字,在表中添加一个OLE对象的字段,然后添加一个记录,插入之前建立的文本文件,如果操作正确的话,应该可以看到一个新的名为“数据包"的记录即可。 这样从URL上直接请求这个数据库将会提示"缺少关闭脚本分隔符",从而拒绝下载,因为这个方式比较麻烦我在网上找了一段小代码来完成OLE对象的插入工作,只要将数据库名设置好,然后放在和数据库内一目录运行一下就可以了。
<% db="d.mdb" '这里改成您的数据库地址 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)") '提示表及字段创建成功 response.write "表、字段创建成功!" 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 '提示内容添加成功 response.write "内容添加完成!" set rs=nothing conn.close set conn=nothing %>
|
这段代码运行完之后将会在数据库内生成一个nodownload表,表内字段是notdown。如果数据库内已有同名的数据表存在请将代码内的nodownload改成自己想要的数据表名即可。
AcOol PS:还是有朋友说写的不够详细,我都没话说了,我给你写详细点:
1、打开access数据库 2、使用设计创建表,添加字段notdown,类型使用“OLE对象” 3、保存为nodownload,不创建主键。 4、打开记事本,编辑文件nodownload.txt,内容为“<%”。 5、打开nodownload表,点击右键-->插入对象,选择从文件插入,定位到nodownload.txt,确认。 以上都需要在数据库创建一个表,大家可以把这个表留着不管,也可以直接删除,同样可以起到反下载的功能,即:执行后再删除。关于这一点,大家可以试试。
|
这个方法处理过的MDB无法下载,但是据说在数据库中插入%>与最小木马,备份数据库为asp文件时,如果插入位置靠前,还是可以作为webshell服务器端利用的,不过这个我没测试过。
|
|