ASP实现防盗链的原理:根据浏览者访问时间及下载资源产生临时文件供下载,下载后自动删除临时文件,从而防止盗链。
文件目录结构:建立一个专门存放下载资源的目录,如:DOWN,此目录最好放在网站根目录之外,在引用时用绝对地址来引用,当然也可以放在根目录之内。网站根目录中存放网页文件,并且建立一个TEMP目录,用于存放临时文件。
数据库文件:Soft.mdb其中Dsoft表存放有关下载资源文件的相关信息。所有字段都可以设为文本型,DZYID为资源的ID,DNAME为资源名称,DSTYL为资源类型(如:soft表示为下载资源,view可为在线观看的影音资源),DFILE为文件名称。
网页文件:其中Global.asa必须放在网站根目录下,浏览者启动任何一个页面都会先调用此文件,以产生一个session,其名称为getfile,内容为按时间产生临时文件名,global.asa具体内容如下:
<Script Language="Vbscript" runat=server> Function Zh(s1)'根据日期时间产生随机字符串 zh=int(now*1000000) End Function Sub Session_Onstart Session.TimeOut=30 Session("GetFile")=Zh(Now()) End Sub </Script>
其中:Session.TimeOut=30定义了Session过期时间长度为30分钟。
Conn.asp <%定义文件位置等 jddz="E:\test\" '网站根目录在服务器上的上一级目录的绝对地址 bzwz= " http://soft.test.net " ' 网站域名地址 db=Server.Mappath("SOFT.MDB") '定义数据库文件的位置 Connstr = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db & "; Persist Security Info=False;Jet OLEDB:Database Locking Mode=2;Jet OLEDB:Database Password=A" Set Conn=Server.CreateObject("ADODB.CONNECTION") Conn.Open Connstr %>
Default.asp主文件 <!-#INCLUDE file="conn.asp"-> <%action=Request.Querystring("action") Select Case action Case "dele" Call Dele Case "down" Call Down Case "view" Call View Case alse Call Defa End Slesct Function Zh(s1)'根据日期时间产生随机字符串 zh= int(now*1000000) End Function Sub Defa()'下载文件显示页 Reasponse.Write "不要尝试同时从本站下载多个文件<br>" Set Rs=Server.CreateObjcet("Adodb.RecordSet") SQL="Select * From Dsoft" Rs.Open SQL,Conn,3,2 Do While Not Rs.Eof Response.Write "<a href='default.asp?id="&rs("Dzyid") & "&action=down'>" & rs("Dname") & "</a></br>" Rs.Movenext Loop End Sub Sub Down ( )'下载页, 以下三句为防止从其他地址直接打开本页,如果检测到是盗链就转到错误页
|