一、原理
要實現防盜鏈,我們就必須先理解盜鏈的實現原理,提到防盜鏈的實現原理就不得不從HTTP協議說起,在HTTP協議中,有一個表頭字段叫referer ,採用URL的格式來表示從哪裡連結到目前的網頁或文件。換句話說,透過referer,網站可以偵測目標網頁造訪的來源網頁,如果是資源文件,則可以追蹤到顯示它的網頁位址。有了referer追蹤來源就好辦了,這時就可以透過技術手段來進行處理,一旦檢測到來源不是本站即進行阻止或返回指定的頁面。如果想對自己的網站進行防盜鏈保護,則需要針對不同的情況進行區別對待。
如果網站伺服器用的是apache,那麼使用apache自帶的Url Rewrite功能可以很輕鬆地防止各種盜鏈,其原理也是檢查refer,如果refer的信息來自其他網站則重定向到指定圖片或網頁上。
如果伺服器使用的是IIS的話,則需要透過第三方插件來實現防盜鏈功能了,現在比較常用的一款產品叫做ISAPI_Rewrite,可以實現類似於apache的防盜鏈功能。另外對於論壇來說還可以使用「登入驗證」的方法進行防盜鏈。
二、實現防盜鏈
現在讓我們在ASP.NET Core中實現防盜鏈技術來保護我們的應用程式和網站檔案。這就要透過ASP.NET Core中的中間件技術,監聽並處理所有傳入的請求,檢查這些請求是不是來自我們的應用程式。
讓我們來創建這個防盜鏈的中間件程序:
public class HotlinkingPreventionMiddleware { private readonly string _wwwrootFolder; private readonly RequestDelegate _next; public HotlinkingPreventionMiddleware(RequestDelegate next, IHostingEnvironment env) { _wwwrootFolder = envWebRootPath; _next = next; } public async Task Invoke(HttpContext context) { var applicationUrl = $"{contextRequestScheme}://{contextRequestHostValue}"; var headersDictionary = contextRequestHeaders; var urlReferrer = headersDictionary[HeaderNamesReferer]ToString(); if(!stringIsNullOrEmpty(urlReferrer) && !urlReferrerStartsWith(applicationUrl)) { var unauthorizedImagePath = PathCombine(_wwwrootFolder,"Images/Unauthorizedpng"); await contextResponseSendFileAsync(unauthorizedImagePath); } await _next(context); } }
在這個中間件中我們可以看到ASP.NET Core中的Request對象並沒有對Referrer進行封裝,想獲取Referrer,就要透過HTTP頭資訊(Headers)進行存取。
通常都要有一個IApplicationBuilder擴充:
public static class BuilderExtensions { public static IApplicationBuilder UseHotlinkingPreventionMiddleware(this IApplicationBuilder app) { return appUseMiddleware(); } }
最後,使用它只需要在Configure函數中調用,上面的擴充函數。
app.UseHotlinkingPreventionMiddleware();
三、真能防?
如何突破防盜鏈?針對檢視refer的方式,可以在頁面中間件裡面先進入目的地址的另外一個頁面在轉到目的頁面即可,這樣頁面的refer就是目的站點自己的,如此,即做到突破。這方面可以使用的工具很多,尤其是成熟的web專案測試包,如HtmlUnit,直接在請求中設定refer都是可以的。
如果盜用網站是 https 的 protocol,而圖片連結是 http 的話,則從 https 向 http 發起的請求會因為安全性的規定,而不帶 referer,從而實現防盜鏈的繞過。
最後,我只能說這種方式,只能在一定程度上進行防禦,不可能杜絕所有的攻擊,還是建議使用成熟伺服器應用的方案,例如Nginx。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。
更多Asp.Net Core 透過中間件防止圖片盜鏈的實例相關文章請關注PHP中文網!

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver Mac版
視覺化網頁開發工具