日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击

發布時間:2023/12/4 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是跨站請求偽造

跨站請求偽造(英語:Cross-site request forgery),也被稱為?one-click attack?或者?session riding,通常縮寫為?CSRF?或者?XSRF, 是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法。【1】?跟跨網站腳本(XSS)相比,XSS?利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。

想了解更多,請查看維基百科上的詳細介紹。

使用 Asp.Net Core 內置的 Antiforgery

Asp.Net Core 應用中內置了?Microsoft.AspNetCore.Antiforgery?包來支持跨站請求偽造。如果你的應用引用了?Microsoft.AspNetCore.App?包, 則就已經包含了?Microsoft.AspNetCore.Antiforgery?。如果沒有, 則可以使用下面的命令來添加這個包:

dotnet add package Microsoft.AspNetCore.Antiforgery

添加了這個包之后, 需要先修改?Startup.cs?文件中的?ConfigureServices?方法, 添加下面的配置:

public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddAntiforgery(options => { options.Cookie.SameSite = SameSiteMode.Lax; options.HeaderName = "X-XSRF-TOKEN"; }); }}

在?SecurityController.cs?文件中添加一個 Api , 來頒發憑據:

[Route("api/[controller]")][ApiController]public class SecurityController : Controller { private IAntiforgery antiforgery; public SecurityController( IAntiforgery antiforgery ) { this.antiforgery = antiforgery; } [HttpGet("xsrf-token")] public ActionResult GetXsrfToken() { var tokens = antiforgery.GetAndStoreTokens(HttpContext); Response.Cookies.Append( "XSRF-TOKEN", tokens.RequestToken, new CookieOptions { HttpOnly = false, Path = "/", IsEssential = true, SameSite = SameSiteMode.Lax } ); return Ok(); }}

當客戶端請求?~/api/security/xsrf-token?時, 服務端發送兩個 Cookie :

  • .AspNetCore.Antiforgery.xxxxxx?一個 HTTP Only 的 Cookie , 用于服務端驗證;

  • XSRF-TOKEN?客戶端需要將這個 Cookie 的值用 X-XSRF-TOKEN 的 Header 發送回服務端, 進行驗證;

注意:這兩個 Cookie 不支持跨域請求, 只能在相同的站點內請求, 也是出于安全性方面的考慮。

可以為某一個 ApiController 或者 Action 方法單獨添加?ValidateAntiForgeryTokenAttribute標記來驗證?XSRF-TOKEN, 也可以全局注冊一個?AutoValidateAntiforgeryTokenAttribute?過濾器來進行自動驗證, 代碼如下:

public class Startup { public void ConfigureServices( IServiceCollection services, IHostingEnvironment env ) { services.AddMvc(options => { if (env.IsProduction()) { options.Filters.Add( new AutoValidateAntiforgeryTokenAttribute() ); } }); }}

注意問題:不是所有的方法都需要進行 XSRF 認證,除了 GET, HEAD, OPTIONS 和 TRACE 之外的方法才支持 XSRF 認證。

Angular 內置支持

Angular 的 Http 模塊內置支持 XSRF , 前提條件如下:

  • 存在客戶端可以操作的名稱為?XSRF-TOKEN?的 Cookie ;

  • 該 Cookie 不能是 HttpOnly 的, 否則客戶端腳本無法讀取;

  • 該 Cookie 的 Path 必須為?/?;

這三個條件都滿足, 則在向服務端請求時自動發送名稱為?X-XSRF-TOKEN?的 Header , 值則為?XSRF-TOKEN?的 Cookie 的值, 這樣就回自動滿足上面的服務端的設置, 實現自動防御跨站請求偽造。

原文地址:https://beginor.github.io/2019/05/27/anti-forgery-with-asp-net-core-and-angular.html


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結

以上是生活随笔為你收集整理的在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。