asp.net中利用ashx實現(xiàn)圖片防盜鏈的原理分析
更新時間:2008年09月10日 00:59:19 作者:
盜鏈的危害我就不說了,網(wǎng)上有很多。下面是asp.net下利用ashx的防盜鏈原理分析
直接分析盜鏈原理:看下面用httpwatch截獲的http發(fā)送的數(shù)據(jù)
GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer: http://m.fzitv.net/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
Host: m.fzitv.net
Connection: Keep-Alive
該數(shù)據(jù)包表示請求http://m.fzitv.net/Img.ashx?img=svn_work.gif文件。我們可以看到Referer表示上一頁請求頁面地址,也就是文件來源。Host表示當前請求的主機地址。
下面是一個盜鏈的數(shù)據(jù)包
GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer: http://745.cc/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
Host: m.fzitv.net
Connection: Keep-Alive
我們可以看到,上面兩個數(shù)據(jù),表示對于同一個文件:http://m.fzitv.net/Img.ashx?img=svn_work.gif的請求過程,這里的不同就是Referer,也就是都是請求同一個文件,但是請求的來源是不同的。因此我們可以在程序里判斷是否是來源于當前服務器,來判斷是否是盜鏈。明白原理以后,實現(xiàn)防盜鏈就非常簡單了。下面以圖片防盜鏈來實現(xiàn)一個演示。ASP.NET中添加一個img.ashx文件,然后后臺代碼如下:
復制代碼 代碼如下:
using System;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace GetImage
{
/// <summary>
/// $codebehindclassname$ 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Img : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpg";
if (context.Request.UrlReferrer != null && context.Request.UrlReferrer.Host.Equals(context.Request.Url.Host, 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;
}
}
}
}
表示如果來源不為空,并且來源的服務器和當前服務器一致,那就表示是正常訪問,非盜鏈。正常訪問文件內(nèi)容。
否則就是盜鏈,返回網(wǎng)站LOGO。
你甚至可以做成隨機返回正確的圖片,隨機返回錯誤圖片,或者定時返回正確圖片,定時返回錯誤圖片。
然后就是圖片的使用了,這時使用圖片就不是直接<input type="image" src="svn_work.gif" />了,而是<input type="image" src="/Img.ashx?img=svn_work.gif" />,就是說通過img,ashx來讀取圖片。別人盜鏈的話要用下面代碼:<input type="image" src="http://m.fzitv.net/Img.ashx?img=svn_work.gif" />。
趕緊給自己的網(wǎng)站加上防盜鏈吧!
相關文章
ASP.NET連接 Access數(shù)據(jù)庫的幾種方法
這篇文章主要介紹了ASP.NET連接 Access數(shù)據(jù)庫的幾種方法,每種方法都非常不錯,具有參考借鑒價值,需要的朋友一起學習吧2016-08-08
.NET中利用js讓子窗體向父頁面?zhèn)髦档膶崿F(xiàn)方法
.NET中利用js讓子窗體向父頁面?zhèn)髦档膶崿F(xiàn)方法,需要的朋友可以參考一下2013-02-02
詳解CentOS 7.4下如何部署Asp.Net Core結合consul
這篇文章主要介紹了詳解CentOS 7.4下如何部署Asp.Net Core結合consul,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
asp.net 自定義控件實現(xiàn)無刷新上傳圖片,立即顯示縮略圖,保存圖片縮略圖
自定義控件實現(xiàn)無刷新上傳圖片,立即顯示縮略圖,保存圖片縮略圖2010-01-01
System.Web中不存在類型或命名空間名稱“Optimization”(是否缺少程序集引用?)
這篇文章主要為大家詳細介紹了命名空間“System.Web”中不存在類型或命名空間名稱“Optimization”的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
ASP.NET MVC使用EPPlus,導出數(shù)據(jù)到Excel中
這篇文章介紹的是怎樣導出數(shù)據(jù)到Excel文件中,大多數(shù)的后端程序都有報表功能:把顯示在Grid中的數(shù)據(jù)導出到Excel文件中,這篇文章中使用的是EPPlus組件。需要的朋友可以參考借鑒2016-12-12
Asp.Net程序目錄下文件夾或文件操作導致Session失效的解決方案
這篇文章主要介紹了Asp.Net程序目錄下文件夾或文件操作導致Session失效的解決方案,需要的朋友可以參考下2017-06-06

