自从搞ASP+ACCESS没少为避免数据库下载而伤过神,网上的奇淫技巧更是数不胜数,本文就是同大家共同探讨各路前辈的留下的秘笈并指中其中的优劣,最后为大家提供一种最佳的解决方案。

  一、开篇

  自从搞ASP+ACCESS没少为避免数据库下载而伤过神,网上的奇淫技巧更是数不胜数,本文就是同大家共同探讨各路前辈的留下的秘笈并指中其中的优劣,最后为大家提供一种最佳的解决方案

  二、剖析

  为了防止ACESS数据库下载,小的见过不少方法,主要有以下几种:

  1、数据库加密--------这个自然不用说了,别人如果知道数据库路径,照样能下载,打开数据库其实也很简单,网上破解ACCESS数据库的密码软件太多了,以前我也有所研究,97版的ACCESS的密码是从文件的开头第73(如果这个数字没记错的话)个字符开始连续的十多个,这个是密码与已知的一串字符异和的结果,2000版的ACCESS变聪明了一些它的加密后的密码不是连续是间隔的不过加密密钥还是一样的,由于是对称加密所以破解ACCESS简直易如反掌(呵呵,好像跑题了)

  2、数据库文件名更名--------这个用的比较多,主要是用到了HTML的锚点,将数据库的文件名中加入“#”,如果直接敲入数据库的路径试图下载的话,由于浏览器只解析到了#前面一大串URL,#后被认为是锚点标记,数据路径被保护起来了。刚看到这种方法时,俺确实得佩服最初发现这个方法的N人。可惜没多久,在网上看到了另一篇文章对此方法的破解,原理很简单,字符“#”被URL解析后的字符应该是“%35”,这就是我们在地址栏里经常看到%20样的东西,其实是空格,由于进行了URL编码所以解析成了%20(20是因为空格的ASC码值为20)

  3、数据库扩展名更名--------这个用的太普遍了,扩展名一般改成.ASP,因为扩展名为。ASP文件都要交给ASP。DLL文件解释执行,ASP。DLL只会解释在<%%>之间的代码(还有<script runat=server></script>,其它的一概不管,原封不动地交给浏览器处理,所以直接把扩展名改为ASP后,数据不会被下载,但是会被浏览器直接打开.这样别人将内容拷贝后仍然可以还原成原始的MDB文件。

  三 解决

  大家应该比较了解动网论坛,他的数据库里有一个NotDown的表,这个表只有一个字段,并且这个字段的类型是OLE型,用于存放二进制的数据,这个表有什么作用呢?呵呵...

  把动网的数据库扩展名改成ASP,然后在浏览器里输入对应路径的数据库地址,看到什么了?一串错误的ASP脚本错误的信息,当然数据库也没办法DOWN下来了,为什么会这样呢,那个NotDown表究竟存放的是什么呢??   大家好好看看第二节中的第3种方法,仔细琢磨一下应该不难明白结论,正是因为NotDown表是有类似这样的脚本致使ASP.DLL把它当作真正的ASP文件来执行,但是这恰恰是动网数据库故意安排的语法错误,致使ASP.DLL解释里出错,因而把ASP出错信息显示出来,从而保护了真正的数据.

  四 实践

  NotDown表中倒底写了些什么呢??呵呵,是不是有点急了.   我们知道NotDown表由于是二进制字段,所有我们读写数据库的时候,也要改一改常规,ADO中专门有读写二进制字段的方法它们分别是AppendChunk 和GetChunk 有了这两个方法我们就可以看看那个表里面究竟是啥玩意了

  <%   ------此处省略连接数据200字,得到数据连接对象Conn   set rs=server.createobject("adodb.recordset"   sql="select notdown from NotDown"   rs.open sql,0,1   data=rs(0).GetChunk(rs(0).ActualSize) 读出所有的二进制数据   rs.close   set rs=nothing   ----关闭数据库连接   response.BinaryWrite(data)由于data是二进制,所以要调用response打印二进制的方法将其输出   %>

  过足瘾了吧,想知道结果是什么吗,赶紧回去调试看看啊

  五 改进

  上面的方法虽然是保住了数据库,但是有个错误的提示,总是觉得有点不爽,我们来改点别的   如果试图输入数据库的地址来下载数据库,将会自动跳转到搜狐网站,代码如下

  <%   ------此处省略连接数据200字,得到数据连接对象Conn   set rs=server.createobject("adodb.recordset")   sql="select notdown from NotDown"   str="<%response.redirect(""http://www.sohu.com"""&chr(37)&">"   由于字段是二进制数据,我们要是直接把Str字符串字入数据库的话会有一点问题   在VBS中每一个字符占两个字节,所以我们要去掉高位的空字节

  for i=1 to lenb(str)   if midb(str,1,i)<>0 then   data=data+ascb(midb(str,1,i))   end if   next

  rs.open sql,0,3   data=rs(0).AppendChunk(data) 写入二进制数据   rs.update   rs.close   set rs=nothing

  %>      OK了,看看运行效果,甚至还可以加入一段JS脚本,弹出一个对话框,吓吓那些下载数据库的小猫们,还不敢快试试去

ASP终极防下载(转)的更多相关文章

  1. Asp.net mvc 下载文件

    前言 最近有需求需要下载文件,可能是image的图片,也可能是pdf报告,也可能是微软的word或者excel文件. 这里就整理了asp.net mvc 和asp.net webapi 下载的方法 A ...

  2. ASP.NET批量下载文件的方法

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  3. ASP.NET批量下载文件

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  4. asp.net mvc5 下载文件方法

    控制器自带的 FileContentResult 可以让我们很方便的返回文件到服务端,减少了很多步骤.用于下载文件的时候,像视频.文本.图片这种浏览器支持的文件,默认就会被浏览器打开.这时候想让它变成 ...

  5. asp.net中下载文件的问题

    今天解决web的文件下载问题,下载的方法网上很多,不过我的下载有点特殊: 1.下载按钮在gridview中,是模板列的linkButton: 2.使用了ajax控件: 所以,在下载时总是报错,通过查找 ...

  6. 遭遇Asp.Net长文件名下载的问题和解决办法

    在Asp.Net中写了一个附件上传和下载的程序,附件上传到数据库中,然后将附件的GUID保存起来,我们可以根据GUID来找到数据库中的附件,一般附件下载的代码是: <!--<br /> ...

  7. Asp.net 同时下载多个文件

    整理自网络 下载思路是首先把多个文件进行压缩,然后再下载压缩成的压缩包 引用文件dll:ICSharpCode.SharpZipLib.dll 1. 合成下载文件夹 Protected Sub btn ...

  8. ASP.NET MVC 下载列表

    在ASP.NET WebForm里要想网站某个文件夹的文件列出来供用户下载似乎很简单,WebForm帮你做了很多事,只需要在Html文件里写: <a href="~/download/ ...

  9. asp.net 批量下载实现(打包压缩下载)

    1.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default ...

随机推荐

  1. Oracle数据字典详解

    学习笔记:oracle数据字典详解 --- 本文为TTT学习笔记,首先介绍数据字典及查看方法,然后分类总结各类数据字典的表和视图.然后列出一些附例.   数据字典系统表,保存在system表空间中. ...

  2. linux 用grep匹配横线

    file的内容如下: ADSFADSFSDFASDFJKJK----------------------------------------ADSFADSFSDFASDFJKJK----------- ...

  3. Android开发之注解式框架ButterKnife的使用

    ButterKnife官网 其实ButterKnife的注解式,与xUtils的ViewUtils模块基本上差不多,只要用过xUtils,这个框架基本上就会了. 一.原理. 最近发现一个很好用的开源框 ...

  4. write_chip,read_chip

    int write_chip(UINT32 addr, UINT32 data) { if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, d ...

  5. acdream 小晴天老师系列——竖式乘法(简单穷举)

    小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)   ...

  6. 【转】[MTK软件原创] [SELinux] 如何设置确认selinux模式

    原文网址:http://bbs.16rd.com/thread-54766-1-1.html [Description] linux SELinux 分成Enforce 以及 Permissive 两 ...

  7. SharePoint 2010 master page 控件介绍(4):隐藏placeholder

    转:http://blog.csdn.net/lgm97/article/details/6409225 <!-- form digest  安全控件用来进行form的安全校验--> &l ...

  8. Myeclipse最简单的svn插件安装方法

    首先来这儿下载插件 http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 找个最新的下载   解压到对应的位置, ...

  9. Base-Android快速开发框架(二)--数据存储之SharedPreferences

    对于App开发者,抽象来说,其实就是将数据以各种各样的方式展示在用户面前以及采集用户的数据.采集用户的数据包括用户的输入.触摸.传感器等,展示的数据通过网络来源于各业务系统,以及用户的 输入数据.在这 ...

  10. js基础第七天

    短信发送验证倒计时案例(常用) 关闭定时器clearInterval this 指向的是 事件的调用者 ,或者是函数的使用者. button 不可以用 disabled 不可用的意思 意思是变成灰色不 ...