ASP防盗链及防下载的方法

本文介绍如何使用ASP技术隐藏网站文件的实际下载路径,通过特定的ASP脚本实现文件下载,同时增强安全性,防止文件被盗链及未授权访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

None.gif 如果我们知道一个静态文件的实际路径如:windows.pdf " >http://www.xx.com/download/51windows.pdf,如果服务器没有作特别的限制设置,我们就可以毫不费力的把它下载下来!当网站提供51windows.pdf下载时,怎么样才能让下载者无法得到他的实际路径呢!本文就来介绍如何使用Asp来隐藏文件的实际下载路径。 
None.gif

None.gif  我们在管理网站文件时,可以把扩展名一样的文件放在同一个目录下,起一个比较特别名字,例如放pdf文件目录为the_pdf_file_s,把下面代码另存为down.asp,他的网上路径为http:
// www.xx.com / down.asp,我们就可以用windows.pdf " >http://www.xx.com/down.asp?FileName=51windows.pdf来下载这个文件了,而且下载者无法看到这个文件实际下载路径的!在down.asp中我们还可以设置下载文件是否需要登陆,判断下载的来源页是否为外部网站,从而可以做到防止文件被盗链。
None.gif

None.gif示例代码:
None.gif
< %
None.gifFrom_url 
=   Cstr (Request.ServerVariables( " HTTP_REFERER " ))
None.gifServ_url 
=   Cstr (Request.ServerVariables( " SERVER_NAME " ))
None.gif
if   mid (From_url, 8 , len (Serv_url))  <>  Serv_url  then
None.gifresponse.write 
" 非法链接! "   ' 防止盗链
None.gif
response.end
None.gif
end   if
None.gif
None.gif
if  Request.Cookies( " Logined " ) = ""   then
None.gifresponse.redirect 
" /login.asp "   ' 需要登陆!
None.gif
end   if
None.gif
Function  GetFileName(longname) ' /folder1/folder2/file.asp=>file.asp
None.gif
while   instr (longname, " / " )
None.giflongname 
=   right (longname, len (longname) - 1 )
None.gif
wend
None.gifGetFileName 
=  longname
None.gif
End Function
None.gif
Dim  Stream
None.gif
Dim  Contents
None.gif
Dim  FileName
None.gif
Dim  TrueFileName
None.gif
Dim  FileExt
None.gif
Const  adTypeBinary  =   1
None.gifFileName 
=  Request.QueryString( " FileName " )
None.gif
if  FileName  =   ""   Then
None.gif  Response.Write 
" 无效文件名! "
None.gif  Response.End
None.gif
End   if
None.gifFileExt 
=   Mid (FileName,  InStrRev (FileName,  " . " +   1 )
None.gif
Select   Case   UCase (FileExt)
None.gif  
Case   " ASP " " ASA " " ASPX " " ASAX " " MDB "
None.gif    Response.Write 
" 非法操作! "
None.gif    Response.End
None.gif
End   Select
None.gifResponse.Clear
None.gif
if   lcase ( right (FileName, 3 )) = " gif "   or   lcase ( right (FileName, 3 )) = " jpg "   or   lcase ( right (FileName, 3 )) = " png "   then
None.gifResponse.ContentType 
=   " image/* "   ' 对图像文件不出现下载对话框
None.gif
else
None.gifResponse.ContentType 
=   " application/ms-download "
None.gif
end   if
None.gifResponse.AddHeader 
" content-disposition " " attachment; filename= "   &  GetFileName(Request.QueryString( " FileName " ))
None.gif
Set  Stream  =  server.CreateObject( " ADODB.Stream " )
None.gifStream.Type 
=  adTypeBinary
None.gifStream.Open
None.gif
if   lcase ( right (FileName, 3 )) = " pdf "   then   ' 设置pdf类型文件目录
None.gif
TrueFileName  =   " /the_pdf_file_s/ " & FileName
None.gif
end   if  
None.gif
if   lcase ( right (FileName, 3 )) = " doc "   then   ' 设置DOC类型文件目录
None.gif
TrueFileName  =   " /my_D_O_C_file/ " & FileName
None.gif
end   if
None.gif
if   lcase ( right (FileName, 3 )) = " gif "   or   lcase ( right (FileName, 3 )) = " jpg "   or   lcase ( right (FileName, 3 )) = " png "   then
None.gifTrueFileName 
=   " /all_images_/ " & FileName  ' 设置图像文件目录
None.gif
end   if
None.gifStream.LoadFromFile Server.MapPath(TrueFileName)
None.gif
While   Not  Stream.EOS
None.gif  Response.BinaryWrite Stream.Read(
1024   *   64 )
None.gif
Wend
None.gifStream.Close
None.gif
Set  Stream  =   Nothing
None.gifResponse.Flush
None.gifResponse.End
None.gif%
>
None.gif
None.gif

转载于:https://www.cnblogs.com/flyingbird/archive/2007/01/08/614743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值