用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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值