當前位置:才華齋>設計>網頁設計>

asp.net中利用ashx實現圖片防盜鏈程式碼

網頁設計 閱讀(2.81W)

直接分析盜鏈原理:看下面用httpwatch截獲的http傳送的資料

asp.net中利用ashx實現圖片防盜鏈程式碼

GET /Img.ashx?img=svn_work.gif HTTP/1.1

Accept: */*

Referer: /

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; CLR 1.1.4322; CLR 2.0.50727; CLR 3.0.04506.648; CLR 3.5.21022; CIBA)

Host:

Connection: Keep-Alive

該資料包表示請求/Img.ashx?img=svn_work.gif檔案。我們可以看到Referer表示上一頁請求頁面地址,也就是檔案來源。Host表示當前請求的主機地址。

下面是一個盜鏈的資料包

GET /Img.ashx?img=svn_work.gif HTTP/1.1

Accept: */*

Referer:

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; CLR 1.1.4322; CLR 2.0.50727; CLR 3.0.04506.648; CLR 3.5.21022; CIBA)

Host:

Connection: Keep-Alive

我們可以看到,上面兩個資料,表示對於同一個檔案:/Img.ashx?img=svn_work.gif的'請求過程,這裡的不同就是Referer,也就是都是請求同一個檔案,但是請求的來源是不同的。因此我們可以在程式裡判斷是否是來源於當前服務器,來判斷是否是盜鏈。明白原理以後,實現防盜鏈就非常簡單了。下面以圖片防盜鏈來實現一個演示。中新增一個檔案,然後後臺程式碼如下:

複製程式碼 程式碼如下:

using System;

using ections;

using ;

using ;

using ices;

using ocols;

namespace GetImage

{

///

/// $codebehindclassname$ 的摘要說明

///

[WebService(Namespace = "")]

[WebServiceBinding(ConformsTo = cProfile1_1)]

public class Img : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

entType = "image/jpg";

if (eferrer != null && ls(, StringComparison.InvariantCultureIgnoreCase))

context.Response.WriteFile(context.Server.MapPath("~/" + context.Request.QueryString["img"]));

else

context.Response.WriteFile(context.Server.MapPath("~/logo.gif"));

}

public bool IsReusable

{

get

{

return false;

}

}

}

}

表示如果來源不為空,並且來源的伺服器和當前伺服器一致,那就表示是正常訪問,非盜鏈。正常訪問檔案內容。

否則就是盜鏈,返回網站LOGO。

你甚至可以做成隨機返回正確的圖片,隨機返回錯誤圖片,或者定時返回正確圖片,定時返回錯誤圖片。

然後就是圖片的使用了,這時使用圖片就不是直接了,而是,就是說通過img,ashx來讀取圖片。別人盜鏈的話要用程式碼。