第一方法
两个文件,第一个文件(例子中的index.asp)负责产生随机的下载链接,并将密匙写入COOKIE;第二个文件(例子中的download.asp)根据COOKIE找到实际下载地址,然后使用Response.AddHeader和Server.Transfer来重定向地址。为什么不使用Response.Redirect呢?是因为Response.Redirect是在客户端的重定向。如果使用Response.Redirect,那么真实的下载地址还是传给了客户端,这样防盗链的作用就小了很多,用MYIE等等浏览器或工具都可以轻易的获得真实下载地址。而IIS5.0中提供的Server.Transfer是服务器端的重定向,与客户端无关,这样客户端就无法获得真实的下载地址。
下面是ID为1的下载文件TTT.EXE的防盗链示例程序,具体内容如下:
<!---------------index.asp----------------->
<%Response.Buffer = true%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Response.Write "下载地址:<br><br>"
Randomize
x = int(rnd()*1000)
Response.Write "<a href='download.asp?id=" & 1*x & "'>ttt.exe</a>"
'这里只是简单的运算,呵呵,这已经足够了。
Response.Cookies("secret") = x
%>
</BODY>
</HTML>
<!---------------download.asp----------------->
<%
Response.Buffer = true
if Request.cookies("secret") = "" then Response.End
if not Isnumeric(request.cookies("secret")) then Response.End
'这里对传递过来的值没有多加判断,只是为了节省篇幅
secret = clng(Request.Cookies("secret"))
id = clng(Request.QueryString("id"))
if id/secret = 1 then
Response.AddHeader "content-type","application/x-msdownload"
Response.AddHeader "Content-Disposition","attachment;filename=ttt.exe"
Server.Transfer "ttt.exe"
else
Response.Write "Error!"
end if
%>
第二方法
两个文件,第一个文件(例子中的index.asp)负责产生随机的下载链接,并将密匙写入COOKIE;第二个文件(例子中的download.asp)根据COOKIE找到实际下载地址,然后使用Response.AddHeader和Server.Transfer来重定向地址。为什么不使用Response.Redirect呢?是因为Response.Redirect是在客户端的重定向。如果使用Response.Redirect,那么真实的下载地址还是传给了客户端,这样防盗链的作用就小了很多,用MYIE等等浏览器或工具都可以轻易的获得真实下载地址。而IIS5.0中提供的Server.Transfer是服务器端的重定向,与客户端无关,这样客户端就无法获得真实的下载地址。
下面是ID为1的下载文件TTT.EXE的防盗链示例程序,具体内容如下:
<!---------------index.asp----------------->
<%Response.Buffer = true%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Response.Write "下载地址:<br><br>"
Randomize
x = int(rnd()*1000)
Response.Write "<a href='download.asp?id=" & 1*x & "'>ttt.exe</a>"
'这里只是简单的运算,呵呵,这已经足够了。
Response.Cookies("secret") = x
%>
</BODY>
</HTML>
<!---------------download.asp----------------->
<%
Response.Buffer = true
if Request.cookies("secret") = "" then Response.End
if not Isnumeric(request.cookies("secret")) then Response.End
'这里对传递过来的值没有多加判断,只是为了节省篇幅
secret = clng(Request.Cookies("secret"))
id = clng(Request.QueryString("id"))
if id/secret = 1 then
Response.AddHeader "content-type","application/x-msdownload"
Response.AddHeader "Content-Disposition","attachment;filename=ttt.exe"
Server.Transfer "ttt.exe"
else
Response.Write "Error!"
end if
%>
第二方法
打开文件 SoftDown.Asp 在:
if request.QueryString("ID")="" then
response.write "不能连接或者没有指定下载软件"
response.end
end if
的上面或者是下面加上下列代码
dim strReferer,domain,splDomain,isHttp
isHttp=false
本站下载cn-media.com/i-v/index.shtm>系统网址列表,不要带上http://
domain="sron.net,61.156.14.223,61.156.14.227"
splDomain=split(domain,",")
strReferer=Request.ServerVariables("HTTP_REFERER")
for iii = 0 to ubound(splDomain)
if instr(strReferer,trim(splDomain(iii)))>0 then isHttp=True
next
if isnull(strReferer) or isHttp=false then
Response.Write "下载链接来自其他网站,这是不允许的,<a href=""./"">请进入本站页面后再进行下载。</a>"
CloseDatabase
response.end
end if
本站下载cn-media.com/i-v/index.shtm>系统网址列表 就是访问你下载频道网址里的域名,比如你的下载频道可以用多个网址来访问,所以这里用逗号隔开.
当然这里的防盗链只是相对的,只要知道了软件存放地址,防盗链就不管用了.
第三方法
用Asp实现防盗链技术(带自动返回功能)

扫码关注公众号 获取更多设计资源...
↓↓↓
【白嫖福利 | 限时领取】
摹客超级版会员(价值1250元)解锁摹客协作、摹客RP、摹客DT所有功能。
公众号主页发送 “激活” 免费获取 激活码
↓↓↓
公众号主页发送 “字体” 获取 全套可商用字体包...
↓↓↓
公众号主页发送 “vi” 获取 500个著名品牌vi设计手册...
↓↓↓
【白嫖福利 | 限时领取】
摹客超级版会员(价值1250元)解锁摹客协作、摹客RP、摹客DT所有功能。
公众号主页发送 “激活” 免费获取 激活码
↓↓↓
公众号主页发送 “字体” 获取 全套可商用字体包...
↓↓↓
公众号主页发送 “vi” 获取 500个著名品牌vi设计手册...
标签:
随机推荐
源文件代码: ------------------------------------------------------------------------------------------------------------------------ <% From_url = Cstr(Request.ServerVariables("HTTP_REFERER")) Serv_url = Cstr(Request.ServerVariables("SERVER_NAME")) if mid(From_url,8,len(Serv_url)) <> Serv_url then response.write "<b>非法链接!<br><span id=yu>3</span><a href=javascript:countDown></a>秒钟后cn-media.com/i-v/index.shtm>系统将自动返回首页......</b>" response.write "<meta http-equiv=refresh content=3;url=index.asp>" response.write "<SCRIPT>valignbottom()</SCRIPT>" response.write "<script>function countDown(secs){yu.innerText=secs;if(--secs>0)setTimeout('countDown('+secs+')',1000);}countDown(3);</script>" response.end end if Function GetFileName(longname)'/folder1/folder2/file.asp=>file.asp while instr(longname,"/") longname = right(longname,len(longname)-1) wend GetFileName = longname End Function Dim Stream Dim Contents Dim FileName Dim TrueFileName Dim FileExt Const adTypeBinary = 1 FileName = Request.QueryString("FileName") if FileName = "" Then Response.Write "无效文件名!" Response.End End if FileExt = Mid(FileName, InStrRev(FileName, ".") + 1) Select Case UCase(FileExt) Case "ASP", "ASA", "ASPX", "ASAX", "MDB" Response.Write "非法操作!" Response.End End Select Response.Clear Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName")) Set Stream = server.CreateObject("ADODB.Stream") Stream.Type = adTypeBinary Stream.Open if lcase(right(FileName,3))="rar" then '设置文件类型 TrueFileName = "/files/"&FileName '设置文件目录的相对路径 end if Stream.LoadFromFile Server.MapPath(TrueFileName) While Not Stream.EOS Response.BinaryWrite Stream.Read(1024 * 64) Wend Stream.Close Set Stream = Nothing Response.Flush Response.End %> |