熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

asp.net中利用ashx實現圖片防盜鏈的原理分析

2022-06-13   來源: ASP編程 

直接分析盜鏈原理看下面用httpwatch截獲的http發送的數據

GET /Imgashx?img=svn_workgif HTTP/
Accept: */*
Referer:
AcceptLanguage: zhcn
UACPU: x
AcceptEncoding: gzip deflate
UserAgent: Mozilla/ (compatible; MSIE ; Windows NT ; NET CLR ; NET CLR ; NET CLR ; NET CLR ; CIBA)
Host:
Connection: KeepAlive


該數據包表示請求文件我們可以看到Referer表示上一頁請求頁面地址也就是文件來源Host表示當前請求的主機地址

下面是一個盜鏈的數據包

GET /Imgashx?img=svn_workgif HTTP/
Accept: */*
Referer:
AcceptLanguage: zhcn
UACPU: x
AcceptEncoding: gzip deflate
UserAgent: Mozilla/ (compatible; MSIE ; Windows NT ; NET CLR ; NET CLR ; NET CLR ; NET CLR ; CIBA)
Host:
Connection: KeepAlive

我們可以看到上面兩個數據表示對於同一個文件的請求過程這裡的不同就是Referer也就是都是請求同一個文件但是請求的來源是不同的因此我們可以在程序裡判斷是否是來源於當前服務器來判斷是否是盜鏈明白原理以後實現防盜鏈就非常簡單了下面以圖片防盜鏈來實現一個演示ASPNET中添加一個imgashx文件然後後台代碼如下

  復制代碼 代碼如下:

  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_workgif />了而是<input type=image src=/Imgashx?img=svn_workgif />就是說通過imgashx來讀取圖片別人盜鏈的話要用下面代碼<input type=image src= />

趕緊給自己的網站加上防盜鏈吧!

From:http://tw.wingwit.com/Article/program/ASP/201405/30975.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.