asp.net core 在vue等spa程序中防止csrf攻击

关于CSRF攻击的基本认识,asp.net core的官方文档上已经写的很清楚了。
image

简单提炼一下:如果你的网站登录了你的银行网站,恰好你访问了钓鱼网站,钓鱼网站就往银行网站,提交了一个转账表单,然后你的钱就被提走了(这是最基本的逻辑)

在mvc和razor pages技术做的网页,表单内部会默认因此了一个token字段,用于判断表单是否合法。
但是在全局启用了csrf验证的网站,难免会有js提交,或者有些网站后台等强交互的场景,使用了vue react 等js技术。

启用header验证token

 builder.Services.AddAntiforgery(opt =>
 {
     opt.HeaderName = "X-XSRF-TOKEN";
 });

添加csrf验证

在控制器上贴上[AutoValidateAntiforgeryToken]特性

访问wwwroot下的静态文件的时候,通过cookie输出csrf-token

 [HttpGet("/admin"), AllowAnonymous]
 public IActionResult Index([FromServices] IWebHostEnvironment webHostEnvironment)
 {
     var token = antiforgery.GetAndStoreTokens(HttpContext).RequestToken;
     HttpContext.Response.Cookies.Append("XSRF-TOKEN", token!, new CookieOptions()
     {
         HttpOnly = false
     });
     var html = Path.Combine(webHostEnvironment.WebRootPath, "admin", "index.html");
     if (System.IO.File.Exists(html)==false)
     {
         return Content("<h1>没有找到该文件</h1>", "text/html");
     }
     return PhysicalFile(html, "text/html");
 }

JavaScript读取csrf-token,并添加到请求的header里

我使用的是axios

http.interceptors.request.use((req) => {
  //jwt等操作
  req.headers.set("client", "web");
  req.headers.set("X-Requested-With", "XMLHttpRequest");
  let csrf = utils.getCookieValue("XSRF-TOKEN");
  if (csrf) {
    req.headers.set("X-XSRF-TOKEN", csrf);
  }
  return req;
});

然后请求,通过验证

-- 好像axios会自动带上XSRF-TOKEN,并放到header的X-XSRF-TOKEN上,果然知名开源库比我想得远。。。

posted on   快乐海盗  阅读(34)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示