[ASP.net WebForm] 防止圖片盜連、img 404時的圖片處理

[ASP.net WebForm] 防止圖片盜連、img 404時的圖片處理

這篇算是懶人筆記

最近點部落格有人分享防止圖片盜連寫法

論壇有人問img 404時的圖片處理

 

下面的類別把這兩種寫法組合在一起


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;

/// <summary>
/// 處理盜連圖片、img 404
/// </summary>
public class imgHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
      
        bool imgExist = (File.Exists(context.Request.PhysicalPath)) ? true : false;//檔案存不存在
        bool access = (context.Request.UrlReferrer.Host == "localhost") ? true : false;//是否為本應用程式的Request


        //如果"檔案不存在"或"盜連"其中一種情況,都輸出404圖片,否則輸出正常的圖片
        string filePath = (imgExist && access) ? context.Request.PhysicalPath : Path.Combine(context.Request.PhysicalApplicationPath , @"images\404.jpg");

        context.Response.Expires = 0;
        context.Response.Clear();
        context.Response.ContentType = "image/jpg";

        context.Response.WriteFile(filePath);//輸出圖片
        context.Response.End();


    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

Web Site專案的Web.config設定


    <httpHandlers >

      <add verb="*" path="*.jpg" type="imgHandler,App_Code" />
    </httpHandlers>

 

.aspx設計畫面(正常使用img的src即可)


    <form id="form1" runat="server"   >
    
     
    <img src="images/NoExist.jpg"  alt="檔案不存在" />
    <img src="images/1.gif" alt="檔案存在" />

    </form>

 

參考文章:

在ASP.NET環境中,如何防止圖片防止被盜連

http图片请求

IHttpHandler 概述(图片防盗链、图片验证码、处理自定义后缀名请求)

相關應用:

MSDN討論:aspx页面中流媒体url地址的保护问题