2025年6月9日 星期一 乙巳(蛇)年 三月十三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

ASP.NET Core MVC/RazorPage使用Anti-Forgery Tokens进行XSRF/CSRF防护

时间:12-15来源:作者:点击数:27

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\".

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门