ASP.NET 防盜鏈的實現[HttpHandler]

來源:互聯網
上載者:User

有時我們需要防止其他網站直接引用我們系統中的圖片,或下載檔案連結。需要禁止盜鏈!在ASP.NET中可以方便的實現該功能!
做一個簡單的盜鏈圖片的樣本,如下。建立立一個WebApplcation。建立立一個images檔案夾,裡面二張jpg圖片,一張logo.jpg正常圖片,一張用於提示非法盜鏈的圖片Error.jpg圖片。
頁面default.aspx頁面很簡單。就一個圖片如下

<form id="form1" runat="server">
    <div>
    <img src="images/logo.jpg" />
    </div>
    </form>

這裡使用HttpHandler來處理盜鏈問題
建立立一個 一般處理常式 Handler1.ashx.代碼及注釋如下public void ProcessRequest(HttpContext context)
        {
            //判斷是否是以磁碟為基礎的網站引用圖片,如果是則返回正確的圖片
            if (context.Request.UrlReferrer.Host == "localhost")
            {
                //設定用戶端緩衝時間到期時間為0,即立即到期
                context.Response.Expires = 0;
                //清空伺服器端為此會話開啟的輸出緩衝
                context.Response.Clear();
                //設定輸出檔案類型
                context.Response.ContentType = "image/jpg";
                //將請求檔案寫入到輸出緩衝中
                context.Response.WriteFile(context.Request.PhysicalPath);
                //將輸出緩衝中的資訊傳送到用戶端
                context.Response.End();
            }
            //如果不是本地引用,則是盜鏈本站圖片
            else
            {
                //設定用戶端緩衝時間到期時間為0,即立即到期
                context.Response.Expires = 0;
                //清空伺服器端為此會話開啟的輸出緩衝
                context.Response.Clear();
                //設定輸出檔案類型
                context.Response.ContentType = "image/jpg";
                //將請求檔案寫入到輸出緩衝中
                context.Response.WriteFile(context.Request.PhysicalApplicationPath + "images/error.jpg");
                //將輸出緩衝中的資訊傳送到用戶端
                context.Response.End();
            }
        }
        //該屬性工作表示HTTP請求是否可以使用當前處理
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }

該檔案用於接管HTTP請求JPG格式的圖片。如果是從主機localhost訪問的,則允許。否則顯示錯誤的圖片!
到這裡該檔案還沒有效果,需要在Web.config檔案進行配置HttpHandler節點 如下<httpHandlers>
        <add verb="*" path=".jpg" type="MyNamespace.Handler,MyNamespace"/>
      </httpHandlers>

來測試下 啟動

圖片正常顯示。如果將訪問地址改為 http://127.0.0.1:2136/Default.aspx 效果如下
 

但此時將該項目發布到IIS中,運行

沒有出現希望效果,這是因為通過IIS請求 並沒有將.JPG的格式使用.NET引擎進行解釋,而是如靜態頁面HTML一樣直接返回給了使用者,這時我們希望使用者請求.JPG時也能像.ASPX一樣即可解決這個問題,開啟IIS。選擇該網站
右鍵屬性

點擊配置

點擊添加

添加.jpg尾碼的請求。交給aspnet_isapi.dll處理,這樣我們自己寫的一般處理常式 Handler1.ashx就有效果了,
也許多心的朋友會問,我們不是在web.config中寫了這樣一個配置的嗎?為什麼沒有作用呢。這是由於IIS對.jpg尾碼的請求直接就載入圖片返回了,這裡並不會使用aspnet_isapi.dll處理,所以也就更加到達不了Handler1.ashx這一步,當我們在IIS中配置後,即可實現!

根據相同的原理也可以實現 下載檔案的防盜鏈~原理雷同~

拓展一下,使用該法還可以解決站內新聞資訊被人使用蜘蛛程式抓取的問題!

不過此法並非沒有缺點,首要的就是會降低系統的效能!這個要看個人權衡了!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.