【问题标题】:Validity of Anti-request forgery token in Asp.net MVCAsp.net MVC 中反请求伪造令牌的有效性
【发布时间】:2020-04-28 04:45:44
【问题描述】:

我有 MVC 应用程序,在应用程序的渗透测试期间,渗透测试团队强调 __RequestVerificationToken 值可以重复使用(即,他们可以使用为先前请求生成的 __RequestVerificationToken 值发出 POST 请求页面或同一用户的上一个登录会话期间)

是否有任何配置可以控制生成的__RequestVerificationToken 值的有效性?

cshtml

@using (Html.BeginForm("Register", "User", FormMethod.Post, role = "form", novalidate = "false"
{
    @Html.AntiForgeryToken()
    ///// some more code
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(parameter)
{
    //// some code 
}

【问题讨论】:

  • 没有自定义实现。它是 MVC 的开箱即用功能。
  • 将代码添加到问题中。

标签: asp.net .net asp.net-mvc csrf


【解决方案1】:

XSRF 令牌是基于会话的,这意味着现有令牌可以并且将在同一会话中多次使用。

您的第一个测试用例无效,相同的 cookie 可以为同一个用户重复使用...但是您的第二个测试用例有效,用户在注销后应该无法重复使用相同的令牌。确保在您的注销方法中清除了会话。

更多关于XSRF token generation的信息:

如果当前的 HTTP 请求已经包含一个反 XSRF 会话 令牌(anti-XSRF cookie __RequestVerificationToken),安全性 令牌从中提取。如果 HTTP 请求不包含 反 XSRF 会话令牌,或者如果提取安全令牌失败, 将生成一个新的随机反 XSRF 令牌。

【讨论】:

  • 谢谢,但奇怪的是需要显式调用 Session.Adandon()。让我试试看。
  • @jk.shan:你是用MS内置的Identity来注销的,即AuthenticationManager.SignOut吗?最好分享您的注销操作方法。
猜你喜欢
  • 2021-10-17
  • 2017-02-09
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2014-04-26
相关资源
最近更新 更多