如何在ASP.NET中實現防盜鏈

來源:互聯網
上載者:User
 

對於網站盜鏈行為,是非常不道德的。我們也不能只是譴責那些沒素質的傢伙,最終還得在技術上防止網站資源被別人盜用。

要實現防盜鏈,我們就得在IIS處理類似圖片檔案的資源時攔上一刀,檢查它的通行證是否合法,不合法的請求我們就要堅決的斃掉。

我們先來看一張有關IIS處理請求的圖

這張圖片說名了一個ASP.NET 處理管道的流程。首先一個請求過來以後,會先被IIS(WinXP中的進程叫做aspnet_wp.exe,Win2003中叫做w3wp.exe),如果IIS發現請求的時asp頁面,那麼就交給asp.dll進行處理;如果請求的是一個aspx頁面,那麼就交給aspnet_isapi(IIS擴充)進行處理,如果是HTML 頁面、文字檔、JPEG 和 GIF 映像,那麼IIS進程就自己進行處理。

我們看到在ASP.NET處理管道中要經曆一個HttpModule和HttpHandler。我們要用到的就是HttpHandler。也就說我們要自己實現一個HttpHandler來處理圖片啊,壓縮包什麼的請求。
實現起來也不是很難,只要繼承並實現IHttpHandler介面就可以了。

其中 IsReusable 說明是否可以被緩衝,而ProcessRequest方法就是如何進行處理的代碼。

1. 我們可以通過判斷context.Request.UrlReferrer來分辯請求是否合法,然後通過context.Response.WriteFile(context.Request.PhysicalPath);來輸出檔案。
2. 還要通過配置config檔案來讓asp.net知道有這個httphandler,格式類似於下面這個。

• verb可以是"GET"或"POST",表示對GET或POST的請求進行處理。"*"表示對所有請求進行處理,這裡是對GET請求進行處理。
• path指明對相應的檔案進行處理,"*.aspx"表示對發給所有ASPX頁面的請求進行處理。
• type屬性中,逗號前的字串指明HttpHandler的實作類別的類名,後面的字串指明Dll檔案的名稱。
3. 最後還要配置IIS,將要處理的檔案類型映射到aspnet_isapi.exe

這樣當有對gif圖片的請求是就會通過我們的HttpHandler,讓我們可以斬斷盜鏈“黑手”。

但是如何你要防止盜鏈的檔案比較多,有gif,jpg,rar,zip,txt,bmp,等等時,我們還要在web.config中進行配置嗎?如果Handler的變更要修改web.config,會造成網站的重啟。是否有好的解決方案呢,大家可以去想想,找找。我下次在接著說:)

參考資源:
ugoer
msdn

本來想寫來自哪裡的,可是哪個圖片是防止盜連的(汗....)就不寫了,順便ps dudu一下,以前上傳圖片都可以很大的,現在限制成了200k, 真不知道為什嗎?
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.