直接分析盜鏈原理
看下面用httpwatch截獲的http發送的數據
GET /Img
ashx?img=svn_work
gif HTTP/
Accept: */*
Referer:
Accept
Language: zh
cn
UA
CPU: x
Accept
Encoding: gzip
deflate
User
Agent: Mozilla/
(compatible; MSIE
; Windows NT
;
NET CLR
;
NET CLR
;
NET CLR
;
NET CLR
; CIBA)
Host:
Connection: Keep
Alive
該數據包表示請求文件
我們可以看到Referer表示上一頁請求頁面地址
也就是文件來源
Host表示當前請求的主機地址
下面是一個盜鏈的數據包
GET /Img
ashx?img=svn_work
gif HTTP/
Accept: */*
Referer:
Accept
Language: zh
cn
UA
CPU: x
Accept
Encoding: gzip
deflate
User
Agent: Mozilla/
(compatible; MSIE
; Windows NT
;
NET CLR
;
NET CLR
;
NET CLR
;
NET CLR
; CIBA)
Host:
Connection: Keep
Alive
我們可以看到
上面兩個數據
表示對於同一個文件
的請求過程
這裡的不同就是Referer
也就是都是請求同一個文件
但是請求的來源是不同的
因此我們可以在程序裡判斷是否是來源於當前服務器
來判斷是否是盜鏈
明白原理以後
實現防盜鏈就非常簡單了
下面以圖片防盜鏈來實現一個演示
ASP
NET中添加一個img
ashx文件
然後後台代碼如下
復制代碼 代碼如下:
using System;
using SystemCollections;
using SystemData;
using SystemWeb;
using SystemWebServices;
using SystemWebServicesProtocols;
namespace GetImage
{
/// <summary>
/// $codebehindclassname$ 的摘要說明
/// </summary>
[WebService(Namespace = )]
[WebServiceBinding(ConformsTo = WsiProfilesBasicProfile_)]
public class Img : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
contextResponseContentType = image/jpg;
if (contextRequestUrlReferrer != null && contextRequestUrlReferrerHostEquals(contextRequestUrlHost StringComparisonInvariantCultureIgnoreCase))
contextResponseWriteFile(contextServerMapPath(~/ + contextRequestQueryString[img]));
else
contextResponseWriteFile(contextServerMapPath(~/logogif));
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
表示如果來源不為空
並且來源的服務器和當前服務器一致
那就表示是正常訪問
非盜鏈
正常訪問文件內容
否則就是盜鏈
返回網站LOGO
你甚至可以做成隨機返回正確的圖片
隨機返回錯誤圖片
或者定時返回正確圖片
定時返回錯誤圖片
然後就是圖片的使用了
這時使用圖片就不是直接<input type=
image
src=
svn_work
gif
/>了
而是<input type=
image
src=
/Img
ashx?img=svn_work
gif
/>
就是說通過img
ashx來讀取圖片
別人盜鏈的話要用下面代碼
<input type=
image
src=
/>
趕緊給自己的網站加上防盜鏈吧!
From:http://tw.wingwit.com/Article/program/ASP/201405/30975.html