【发布时间】:2014-12-07 19:23:46
【问题描述】:
在 ASP.NET MVC 中,ValidateAntiForgeryTokenAttribute 调用的验证逻辑允许匿名防伪令牌,即没有任何用户特定信息(如 IIdentity.Name 或 ClaimUid)的令牌。
因此,如果未使用声明并且在登录后未设置 HttpContext.User(很常见),系统的恶意用户可以使用恶意用户自己合法获得的反伪造令牌。
这似乎不可取。为什么允许匿名令牌?
【问题讨论】:
-
我已经回答了你的问题,除了一部分 - 你是什么意思 HttpContext.User 在登录后没有设置?发生这种情况的唯一方法是登录失败或者您在处理 POSTed 登录表单后没有执行重定向。
-
@Tommy 如果您没有显式设置 HttpContext.User(就像 FormsAuthentication 通过读取登录时设置的 cookie 所做的那样),则 HttpContext.User 对所有登录用户都是相同的,因此“匿名”。
-
我从未在我们用 MVC 制作的任何应用程序中看到过这种行为。一旦我们设置了 Auth Cookie(在 Identity 或 FormsAuthentication 中)——我们永远不必“手动”设置 cookie 或 HttpContext.User。我很好奇您的身份验证是如何设置的。无论哪种方式,为了解决您的问题,AntiForgery 令牌不用于授权资源,仅用于验证来自您的服务器的请求和用户响应
-
如果您不使用 FormsAuthentication 或其他身份提供者,您必须自己设置 HttpContext.User - 否则对于所有登录用户来说都是平等的。但是如果你没有使用 HttpContext.User,很容易忘记这一点。
-
Gotcha - 我以为您正在使用其中之一,但仍然必须手动控制它。我的误解。
标签: .net asp.net-mvc csrf