当前位置: 首页 > article >正文

.NET Core 中预防跨网站请求伪造 (XSRFCSRF) 攻击

.NET Core 中预防跨网站请求伪造 (XSRF/CSRF) 攻击

在如今的网络环境中,安全问题一直是开发者们不可忽视的重要方面。跨网站请求伪造(Cross-Site Request Forgery,简称 CSRF)就是一种常见且具有威胁性的网络攻击方式。攻击者通过伪造用户请求,来执行未授权的操作,可能会给用户和网站带来严重的损失。在 ASP.NET Core 应用程序里,预防 CSRF 攻击是一项至关重要的安全措施。下面,我们就来详细探讨一下在 .NET Core 中预防 CSRF 攻击的方法。

1. 启用 AntiForgery 中间件

ASP.NET Core 为我们内置了 AntiForgery 中间件,它的主要作用是生成和验证 CSRF 令牌。要使用这个中间件,我们需要在 Startup.cs 文件里进行相应的配置。

配置服务

ConfigureServices 方法中,添加 AddAntiforgery 服务,同时可以对其进行一些配置,比如设置 Cookie 名称和请求头名称:

public void ConfigureServices(IServiceCollection services)
{services.AddAntiforgery(options =>{// 配置选项,例如 Cookie 名称options.HeaderName = "X-XSRF-TOKEN";options.CookieName = "XSRF-TOKEN";});// 其他服务配置...
}

添加到请求处理管道

Configure 方法中,将 AntiForgery 中间件添加到请求处理管道中:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{// 其他中间件配置...app.UseAntiforgery();// 其他中间件配置...
}

启用这个中间件后,我们就为预防 CSRF 攻击迈出了重要的一步。它可以帮助我们生成和管理 CSRF 令牌,为后续的验证工作打下基础。

2. 生成 Antiforgery 令牌

在视图(例如 Razor 视图)中,我们需要生成 Antiforgery 令牌并将其添加到表单中。这样,在表单提交时,令牌会一同被发送到服务器进行验证。

@page
@model YourNamespace.YourPageModel
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{var requestToken = Antiforgery.GetAndStoreTokens(Context).RequestToken;
}<form method="post"><input type="hidden" name="__RequestVerificationToken" value="@requestToken" /><!-- 表单其他字段 --><button type="submit">提交</button>
</form>

这里,我们通过 Antiforgery.GetAndStoreTokens 方法获取请求令牌,并将其添加到表单的隐藏字段中。@Html.AntiForgeryToken() 也可以实现同样的功能,它会生成一个包含 antiforgery 令牌的隐藏字段。生成令牌的目的是确保请求是来自合法的用户,而不是攻击者伪造的。

3. 使用 AJAX 请求

对于使用 AJAX 进行的请求,我们需要手动设置 XSRF-TOKEN 头。在 JavaScript 中,我们可以从 cookie 中读取令牌,并将其作为请求头的一部分发送。

fetch('/api/your-endpoint', {method: 'POST',headers: {'Content-Type': 'application/json','X-XSRF-TOKEN': $('input[name="__RequestVerificationToken"]').val()},body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch((error) => {console.error('Error:', error);
});

在实际开发中,很多应用都会使用 AJAX 来实现异步交互。手动设置 XSRF-TOKEN 头可以确保 AJAX 请求也能得到有效的 CSRF 防护。

4. 验证 Antiforgery 令牌

在控制器中,我们使用 [ValidateAntiForgeryToken] 属性来验证传入的请求是否包含有效的 antiforgery 令牌。

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult SubmitForm(MyModel model)
{// 处理表单数据...return RedirectToAction("Index");
}

如果请求不包含有效的 antiforgery 令牌,[ValidateAntiForgeryToken] 属性会让 ASP.NET Core 返回一个 400 错误(Bad Request)。这一步是整个 CSRF 防护机制的关键,通过验证令牌,我们可以确保请求的合法性。

5. 额外安全措施

除了使用 AntiForgery 中间件,我们还可以采取一些额外的安全措施来进一步预防 CSRF 攻击:

  • 使用 HTTPS 协议:HTTPS 可以保护网站和 API,确保传输的数据在网络中是加密的,防止数据在传输过程中被窃取或篡改。
  • 限制端点:限制哪些端点可以接受跨站点的 POST 请求,减少攻击面。只允许必要的端点接受跨站点请求,可以降低被攻击的风险。
  • 设置 Cookie 标志:使用 HTTP-only 和 Secure 标志设置 CSRF Cookie,防止 JavaScript 访问该 Cookie,并确保它只能通过 HTTPS 传输。这样可以避免攻击者通过 JavaScript 脚本获取 Cookie 信息。

总之,在 .NET Core 中预防 CSRF 攻击需要我们综合运用多种方法。启用中间件、生成和验证令牌、处理 AJAX 请求以及采取额外的安全措施,这些步骤相互配合,才能构建一个安全可靠的应用程序。开发者们应该时刻关注安全问题,不断完善和优化应用的安全机制,为用户提供一个安全的使用环境。

http://www.lryc.cn/news/2398643.html

相关文章:

  • MFC Resource.h 文件详解与修改指南
  • 2025年06月03日Github流行趋势
  • AI视频编码器(0.4.3) 调试训练bug——使用timm SoftTargetCrossEntropy时出现loss inf
  • 【数据分析】基于Cox模型的R语言实现生存分析与生物标志物风险评估
  • 使用nginx配置反向代理,负载均衡
  • 从 iPhone 备份照片: 保存iPhone图片的5种方法
  • Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式
  • 快速上手pytest
  • 设备驱动与文件系统:02 键盘
  • matlab分布式电源接入对配电网的影响
  • 前端ul-image的src接收base64快捷写法
  • 交通违法拍照数据集,可识别接打电话,不系安全带的行为,支持YOLO,COCO JSON,VOC XML格式的标注数据集 最高正确识别率可达88.6%
  • Qt OpenGL 3D 编程入门
  • 性能优化 - 工具篇:基准测试 JMH
  • Ubuntu 中安装 PostgreSQL 及常规操作指南
  • Nginx网站服务:从入门到LNMP架构实战
  • Java面试八股--08-数据结构和算法篇
  • Java面试八股--06-Linux篇
  • Ajax技术分析方法全解:从基础到企业级实践(2025最新版)
  • Unity 性能优化终极指南 — GameObject 篇
  • dvwa7——SQL Injection
  • Spring AI 项目实战(四):Spring AI + DeepSeek 超参数优化——智能化机器学习平台(附完整源码)
  • Axure疑难杂症:中继器图片替换功能优化(支持修改已有记录-玩转中继器)
  • sqlite3 命令行工具详细介绍
  • ubuntu 22.04 编译安装nignx 报错 openssl 问题
  • 线程相关面试题
  • pikachu通关教程-目录遍历漏洞(../../)
  • Maven-生命周期
  • Hadoop复习(九)
  • Matlab实现LSTM-SVM回归预测,作者:机器学习之心