天天看點

圖檔盜鍊分析(一)

現在探讨一下網站圖檔防盜鍊

一步一步的進行。

(一) 一個網頁中對同域的圖檔的通路

[準備]在Vs中添加一網站,添加images圖檔檔案夾,裡邊放一張a1.gif的圖檔,一張用于顯示防盜鍊的圖檔z1.gif

(1) Aspx

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

    <div>

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

    </div>

    </form>

(2)在浏覽器中通路

有2個通路請求(隻取2個屬性來分析):

<1>請求Default.aspx

·(Request-Line):GET /Default.aspx HTTP/1.1

·Host:192.168.1.105:8029

<2>請求圖檔

·(Request-Line):GET /images/a1.gif HTTP/1.1

·Referer: http://192.168.1.105:8029/Default.aspx

第一次請求的時候沒有Referer屬性值(或說為null)。第二次請求是通路資源檔案,這時,Referer就包含了一個對資源檔案的容器的位址,即圖檔a1.gif來自于http://192.168.1.105:8029/Default.aspx 。

注:http标準協定中有專門的字段記錄referer:一來可以追溯上一個入站位址是什麼;二來對于資源檔案,可以跟蹤到包含顯示他的網頁位址是什麼

(二)另一網站對圖檔的跨域連結

把上一個網站在IIS中釋出,然後在Vs中建立立網站。網站中在Test.aspx中添加圖檔

(1)aspx檔案

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

(2)在浏覽器中通路

有2個請求

<1>請求Test.aspx

·(Request-Line): GET /web2/Test.aspx HTTP/1.1

·Host:localhost:20372

<2>請求圖檔資源

·Referer:http://localhost:20372/web2/Test.aspx

在第一次請求時,此時要向localhost請求Test.aspx。在第二次請求中,請求資源檔案a1.gif,這時要通路的主機位址為:192.168.1.105:8029,這個就是在IIS中釋出的圖檔的源伺服器。而Referer還是Test.aspx所在的網站的請求位址。也就是圖檔a1.gif的的包含容器。這兩個位址不同了,可以利用這個特征來防止圖檔的盜鍊:如果資源檔案的(直接)包含位址與源位址相同則可以使用圖檔,否則就是盜鍊。

(三)添加圖檔過濾img.ashx檔案

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("~/images/" +

context.Request.QueryString["img"]));

        else

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

ContentType設定為圖檔。判斷當請求的(圖檔)資源的源位址(Host)與直接引用位址(Referere)相同,才可以傳回請求的圖檔,否則把圖檔引用指向自定義的防盜圖檔。此時的圖檔引用要改成:

<img src="Img.ashx?img=a1.gif" />

(四)通過加防盜的同域資源通路

(1)default.aspx檔案

圖檔引用改為:<img src="Img.ashx?img=a1.gif" />

(2)在浏覽器中浏覽

兩個請求

<1>請求default.aspx

·(Request-Line):GET /Img.ashx?img=a1.gif HTTP/1.1

·Referer:http://192.168.1.105:8029/Default.aspx

第二次請求中,host與referer的Host部分相同,則傳回正常的圖檔

(五)異域通路

(1)在網站2中,添加對圖檔的通路

        <img src="http://192.168.1.105:8029/Img.ashx?img=a1.gif" />

</form>

·(Request-Line):GET /web2/Test.aspx HTTP/1.1

<2>請求資源檔案

請求資源檔案時,資源檔案位址:Host,直接包含位址,referer,host與referer的host位址不同,是以得到的圖檔位址是一個防盜的圖檔位址。

(未完……)

注:

http頭裡的兩個屬性

Host:用戶端指定自己想通路的WEB伺服器的域名/IP 位址和端口号

Referer:浏覽器向 WEB 伺服器表明自己是從哪個網頁/URL 獲得/點選 目前請求中的網址/URL。

部落格園大道至簡

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

轉載請注明:部落格園

繼續閱讀