.NET 反向代理 YARP 跨域請求 CORS
使用過 nginx 的小夥伴應該都知道,這個中間件是可以設置跨域的,作為今天的主角,同樣的 反向代理中間件的 YARP 毫無意外也支援了跨域請求設置。
有些小夥伴可能會問了,怎樣才算是跨域呢?
在 HTML 中,一些標籤,例如 img、a 等,還有我們非常熟悉的 Ajax,都是可以指向非本站的資源的,那什麼是非本站呢,不同域名、不同埠、還有 http和 https,其中一個不一樣,都是屬於跨域請求。
簡單來說,就是 協議 + 域名 + 埠號,三者一致為同域,否則跨域。
而因為跨域可能會被利用進行 CSRF 攻擊,做過安全掃描的應該對這個非常熟悉,除非被請求站點允許跨域請求,否則瀏覽請將會限制這些請求,而什麼是 CSRF 攻擊呢,下面我摘抄一段介紹:
跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當前已登錄的Web應用程式上執行非本意的操作的攻擊方法。跟跨網站腳本(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。
攻擊細節
言歸正傳,我們來看看 YARP 是怎麼實現 CORS 的:
1、在配置中設置跨域策略
{ "ReverseProxy": { "Routes": { "route1" : { "ClusterId": "cluster1", "CorsPolicy": "customPolicy",//跨域策略名稱,具體策略需要在程式碼中編寫,名稱大小寫不敏感 "Match": { "Hosts": [ "localhost" ] }, } }, "Clusters": { "cluster1": { "Destinations": { "cluster1/destination1": { "Address": "//localhost:10001/" } } } } } }
我翻閱了資料,發現這個非常的無語(當然可能是我沒找到,有新發現的大佬請告知一下我),配置中只是指定了跨域策略的名稱,具體的策略內容卻沒有,而是需要在程式碼裡面編寫,實際上的處理,還是在 CORS 中間件上處理,還真的是能少造輪子就少造(當然,我是非常支援這樣的理念的)。
2、在 Startup 中編寫策略
Startup.cs ConfigureServices
public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("customPolicy", builder => { builder.AllowAnyOrigin(); }); }); }
千萬別忘了在請求管道里也要加上 Cors 中間件噢,需要注意的是 要在 Routing 中間件後加上
public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseCors(); app.UseEndpoints(endpoints => { endpoints.MapReverseProxy(); }); }
具體 cors 怎麼用,我就不一一說了,感興趣的可以到官方文檔上看看,傳送門
感謝大佬們的觀看,我們下次再見,拜拜!
原文鏈接://www.cnblogs.com/ysmc/p/16729550.html

