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 ( )'下载页,
以下三句为防止从其他地址直接打开本页,如果检测到是盗链就转到错误页
0 Comments