asp 防盗链

  如果我们知道一个静态文件的实际路径如:http://www.xx.com/download/51windows.pdf,如果服务器没有作特别的限制设置,我们就可以毫不费力的把它下载下来!当网站提供51Windows.pdf下载时,怎么样才能让下载者无法得到他的实际路径呢!本文就来介绍如何使用ASP来隐藏文件的实际下载路径。 
   
    我们在管理网站文件时,可以把扩展名一样的文件放在同一个目录下,起一个比较特别名字,例如放pdf文件目录为the_pdf_file_s,把下面代码另存为down.asp,他的网上路径为http://www.xx.com/down.asp,我们就可以用http://www.xx.com/down.asp?FileName=51windows.pdf来下载这个文件了,而且下载者无法看到这个文件实际下载路径的!在down.asp中我们还可以设置下载文件是否需要登陆,判断下载的来源页是否为外部网站,从而可以做到防止文件被盗链。 
   
  示例代码: 
  
<%  
  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 
" 非法链接! "   ' 防止盗链 
  response.end 
  
end   if  
   
  
if  Request.Cookies( " Logined " ) = ""   then  
  response.redirect 
" /login.asp "   ' 需要登陆! 
   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 
  
if   lcase ( right (FileName, 3 )) = " gif "   or   lcase ( right (FileName, 3 )) = " jpg "   or   lcase ( right (FileName, 3 )) = " png "   then  
  Response.ContentType 
=   " image/* "   ' 对图像文件不出现下载对话框 
   else  
  Response.ContentType 
=   " application/ms-download "  
  
end   if  
  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 )) = " pdf "   then   ' 设置pdf类型文件目录 

  TrueFileName 
=   " /the_pdf_file_s/ " & FileName 
  
end   if  
  
if   lcase ( right (FileName, 3 )) = " doc "   then   ' 设置DOC类型文件目录 
  TrueFileName  =   " /my_D_O_C_file/ " & FileName 
  
end   if  
  
if   lcase ( right (FileName, 3 )) = " gif "   or   lcase ( right (FileName, 3 )) = " jpg "   or   lcase ( right (FileName, 3 )) = " png "   then  
  TrueFileName 
=   " /all_images_/ " & 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 
  
%>  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值