ASP.NET Core MVC/RazorPage使用Anti-Forgery Tokens进行XSRF/CSRF防护
ASP.NET Web Stack运行时使用同步器令牌模式的变体来抵御XSRF攻击。同步器令牌模式的一般形式是,除了身份验证令牌):一个令牌作为Cookie,另一个作为表单值,两个反XSRF令牌提交到服务器。服务器在两个令牌通过比较检查时才允许请求继续。
如果使用RazorPage的视图默认是打开Anti-Forgery反XSRF验证的。使用MVC的话需要手动打开Anti-Forgery反XSRF验证。
视图中生成令牌
在MVC视图或Razor页面调用@Html.AntiForgeryToken方法。
<form method="post">
@Html.AntiForgeryToken()
<input type="hidden" name="name" />
<input type="submit" value="submit" />
</form>
或者使用TagHelper标签
加入@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers后,默认打开验证,如果要关闭可以在标签上设置asp-antiforgery="false"
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<form method="post" asp-antiforgery="true">
<input type="hidden" name="name" />
<input type="submit" value="submit" />
</form>
它们都会在生成的Html里输出一个隐藏的input
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8D2AldnKCKtPu-yHYNyGFgLsK_rsu1jw-Oec7ad8nTOZGciIwSsGqc1_OLIxalzQDTOs3Howk-w1hq9JJx0SpU5Q_qjAWNjIbB1F52PnyDgSTaxQVWWj7_tP6doLk3ITWctN7Kg6Vz-yiXDW_Q2Tn4U" /></form>
服务端验证Token令牌
在控制器上使用ValidateAntiForgeryToken属性
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index(object obj)
{
}
或者使用ValidateRequestAsync方法验证令牌。
try
{
await _antiforgery.ValidateRequestAsync(HttpContext);
}
catch (Exception ex) {
// HttpAntiForgeryException
}
如果验证成功,则允许请求继续。 如果验证失败,框架将引发 HttpAntiForgeryException。
The required antiforgery request token was not provided in either form field \"__RequestVerificationToken\" or header value \"RequestVerificationToken\".
更新于:1个月前相关文章
- ASP.NET Core 中常用的内置中间件
- .NET9在ASP.NET MVC有什么更新?
- ASP.NET MVC与Web Forms的区别
- 鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?
- ASP.NET Core使用partial标签报错
- Asp.Net Core进程内托管 和 进程外托管的区别
- ASP.NET Core实现多语言本地化Web应用程序
- PDFiumCore | .NET Core PDF 处理渲染库
- ASP.NET生成图片验证码
- asp.net母版页和内容页PageLoad顺序
- MVC跨域问题 Response for preflight has invalid HTTP status code 405
- _ViewStart.cshtml文件的作用
- ASP.NET Core 2.1中的ActionResult<T>
- .NET Core 3.0创建一个单独的可执行文件
- 在ASP.NET Core 2.1中使用HttpClientFactory的3种方法
- .NET Core MVC应用程序创建教程
- .NET Core中的File和PhysicalFile
- .NET Core 读取配置文件方法
- .NET Core 管道模型中间件及管道模拟实现
- ASP.NET Core多环境配置