[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>
參考文章:
IHttpHandler 概述(图片防盗链、图片验证码、处理自定义后缀名请求)
相關應用:
MSDN討論:aspx页面中流媒体url地址的保护问题