Asp图片防盗链解决方案

by 清泉 11. 十月 2008 09:20

       针对图片防盗链,其原理一般就是动态检测来源地址和当前域名是否统一,如是统一的,动态页面将输出图片,如果不统一便跳转到版权说明页面或输出别的图片。下面是一个我已经写好的防盗链的图片显示代码,调用代码为<img src="ShowPicView.Asp?FileName=图片名称" />。这是防盗链代码有需要的直接下载:ShowPicView.rar (859.00 bytes)
       当然仅这样还是不够的,还要让前台输出代码的时候自动把图片替换成这样的链接。因为编辑器上传的时候,他图片的默认地址就是真实的图片地址,而不是<img src="ShowPicView.Asp?FileName=图片名称" />
这样的调用,这样就需要在前台输出代码的时候加一个转换函数,将原有真实链接全转到这种链接到防盗的图片显示的动态页面。下面再给出一个转换函数。
注意:此代码最好是在前台使用,后台里面尽量不要使用,这样便可以方便编辑,不会出错。

下面是自动转换图片地址的代码:

<%
 Function GetPicHtml(ContentStr)
 Dim re,RemoteFile,RemoteFileurl
 Dim SaveIMGFileName,SourceFileUrl,GetPicUrl
 Set re = New RegExp
 re.IgnoreCase = True
 re.Global=True
 re.Pattern = "<(\/){0,1}img[^<>]*>"
 Set RemoteFile = re.Execute(ContentStr)
 Set re = Nothing
  For Each RemoteFileurl in RemoteFile
   if instr(lcase(RemoteFileurl),"/showeditor/uploadfile/")>0 then
    GetPicUrl=replace(replace(lcase(RemoteFileurl),"<img src=""/showeditor/uploadfile/",""),""" border=0>","") '这里检测是否是需要转换防盗链的,其中showeditor/uploadfile是自己网站内的图片目录路径。
    ContentStr = Replace(ContentStr,RemoteFileurl,"<img src=""ShowPicView.Asp?FileName="&SERVER.URLEncode(GetPicUrl)&"""/>")
   end if
  Next
 GetPicHtml = ContentStr
 End function
%>


下面是图片防盗链显示的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.redirect "http://www.supidea.com/logo.gif"
  response.end
 end if

 Function GetFileName(longname)
  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.End
 End if
 
 
 FileExt = Mid(FileName, InStrRev(FileName,".") + 1)
 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("/UploadFile/SmallPicFile/"&FileName)
 
 Set Stream = server.CreateObject("ADODB.Stream")
 Stream.Type = adTypeBinary
 Stream.Open
 
 '设置服务器文件真实地址
 TrueFileName = "/showeditor/uploadfile/"&FileName
 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
%>

Tags: ,

ASP技术资料

评论

添加评论



(将显示你的Gravatar头像)  

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



Supidea.com 晨飞的梦 @ All Rights Reserved. Powered by BlogYi.NET ver:1.8.0.0. 苏ICP备09011404号

关于博主

kamau
抱着美好的理想背井离乡,这酸甜苦辣只能默默忍受。既然选择了路,就得风雨兼程……

Calendar

<<  二月 2012  >>
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

在日历中查看文章

最近的评论

Comment RSS

声明

      本博所发一切破解相关附件只作学习研究交流之用,严禁用于商业用途,请在下载24小时内删除。
      本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009