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

浙公網(wǎng)安備 33010602011771號(hào)