天天看點

圖檔盜鍊分析(二)

HttpHandler是Http進行中心,真正地對用戶端請求的伺服器頁面做出編譯和執行,并将處理過後的資訊附加在HTTP請求資訊流中再次傳回到HttpModule中。HttpHandler與HttpModule不同,一旦定義了自己的HttpHandler類,那麼它對系統的HttpHandler的關系将是“覆寫”關系,那麼它就是一個全局的。

現對網站的gif圖檔進行防盜。

上一篇中通過ashx檔案中對圖檔的處理來處理圖檔防盜,這裡的道理是相同的。

(一)添加自定義HttpHandler

這裡直接在網站裡添加類,并添加到app_code檔案夾中:

在這個類(HttpHandler)裡,通過對請求的資源檔案(可能是圖檔,例如:gif圖)進行位址判斷。對于請求的資源檔案有2個位址:

·Host:這個是請求的位址

·Referer:這個是資源檔案直接的包含位址,例如:在盜鍊異域圖檔的網站D中,請求圖檔的Referer就是這個網站D的位址。

然後因為這個圖檔的Referer位址與被盜的(可以說是Host)位址不同(域名不同),來響應一個固定的圖檔位址(盜鍊圖檔位址)來防盜鍊。

自定義的Handler從IhttpHandler接口派生,并實作兩個方法。

public class GifHandler : IHttpHandler

{

    public bool IsReusable

    {

        get { return false; }

    }

    public void ProcessRequest(HttpContext context)

        string FileName = context.Server.MapPath(context.Request.FilePath);

        if (context.Request.UrlReferrer.Host == null)

        {

            return;

        }

        if (context.Request.UrlReferrer.Host=="192.168.1.105")

            context.Response.ContentType = "image/gif";

            context.Response.WriteFile(FileName);

            FileOperation.WriteFile(

context.Server.MapPath("../logs/"),

"log.txt", context.Request.UrlReferrer.Host);

        else

            context.Response.WriteFile("z1.gif");

        }    

}

·判斷是不是第一次請求,可以了解為是不是請求資源

context.Request.UrlReferrer.Host == null

·因為是請求資源,是以得到請求資源的資源的位址:

string FileName = context.Server.MapPath(context.Request.FilePath);

這裡跟蹤一下,這時,這個FileName的值是:E:\test8\FangdaoTest\images\a1.gif

本地測試時這裡是一個完全的實體位址,通過它能找到這個檔案。

·FileOperation.WriteFile方法。自己定義了一個檔案寫入方法,用于跟蹤一些資訊

·如果資源檔案的請求位址是本域的,則傳回正常的圖檔,否則顯示盜鍊位址的圖檔

·這個Handler定義完後,還不能生效,要進行以下2步才可以。

(二)在Web.Config中注冊

在system.web章節中定義:

<httpHandlers>

            <add path="*.gif" verb="*" type="GifHandler"/>

    </httpHandlers>

在system.web章節中添加HttpHandlers節,并添加自定義的Handler

·path:表示請求的檔案,這裡表示所有的gif檔案

·verb:謂詞,這裡接受任何謂詞,即不管是post還是get,隻要檔案是gif的,就要通過這個handler來處理

·type:指定程式集,這裡因為是在app_code裡添加的類,是以這裡隻寫類名就行了。

完成這2步就可以測試了。但對盜鍊不起作用,因為在IIS中還要添加對Gif圖的映射處理。

(三)在IIS中添加gif映射

·添加aspnet_isapi.dll,這裡随便打開一個,複制一下就行了

·擴充名:.gif

以上三步完成後,gif圖防盜就生效了

(四)在釋出的網站上使用圖檔

<form id="form1" runat="server">

    <div>

        <img src="images/a1.gif" />

    </div>

</form>

頁面效果:

圖檔盜鍊分析(二)

(五)  在Test.aspx中使用圖檔

        <img src="http://192.168.1.105:8029/images/a1.gif" />

圖檔盜鍊分析(二)

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園

繼續閱讀