ASP.NET之图片防盗链的实现

  防盗链的原理,从图片请求的URL地址上判断是否是我们自己网站上的域名,如果不是,恭喜,你的图片已经被盗链了!

   那么我来介绍下图片放盗链的一个方法


  首先,添加个httpHandlers请求,WEBCONFIG部分配置节如下:
       <httpHandlers>
      <add verb="*" path="*.jpg" type="myhandler,App_Code"/>
    </httpHandlers> 注意:对应于system.web之下,别添错了哦!
然后添加个class,取名为myhandler继承于IHttpHandler

class原型如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class myhandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        string FileName = context.Server.MapPath(context.Request.FilePath);
        if (context.Request.UrlReferrer.Host == null)
        {
            context.Response.ContentType = "image/JPEG";
            context.Response.WriteFile("~/images/no.png");//被替换图片
        }
        else
        {
            if (context.Request.UrlReferrer.Host.IndexOf("localhost") > -1)//这里是你的域名
            {
                context.Response.ContentType = "image/JPEG";
                context.Response.WriteFile(FileName);
            }
            else
            {
                context.Response.ContentType = "image/JPEG";
                context.Response.WriteFile("~/images/no.png");
            }
        }
    }

    public bool IsReusable
    {
        get { return true; }
    }

    public myhandler()
    {

    }
}

myhandler继承自IHttpHandler实现了对url来源来判断jpg图片是否被盗链,本class中以localhost为例,修改localhost和images/no.png参数即可

 

次方法也可应用于URL伪静态,上一篇文章 ASP.NET之URL静态化
http://www.cnblogs.com/qingseyuandi/archive/2010/01/14/1647857.html#1747257

===============

下一次聊下图片与ASP.NET程序的服务器分离,欢迎大家光临我的博客。

 

posted @ 2010-01-15 09:27  青涩园地  阅读(453)  评论(0编辑  收藏  举报