【问题标题】:Do ASP.NET MVC CSRF Anti-Forgery Tokens expire?ASP.NET MVC CSRF 防伪令牌是否过期?
【发布时间】:2015-03-12 07:17:54
【问题描述】:

我正在我的 ASP.NET MVC 5 应用程序中实现 CSRF Anti-Forgery 保护。特别是,我引用了 Mike Wasson 在 ASP.NET website 上描述的方法来保护响应 AJAX 请求的控制器方法,例如在 WebAPI 控制器中。该方法利用AntiForgery.GetTokens方法生成基于用户的密码防伪令牌,然后AntiForgery.Validate验证提交的令牌属于当前用户。

我的问题是:这些代币是否有生存期?它们会过期吗?如果是,它们可以使用多长时间?文档对此主题保持沉默。

我不想在我的系统中允许未过期的令牌。此外,我想与客户沟通他们在请求新令牌之前有多少时间是必要的。如有必要,我可以使用 FormsAuthentication.Encrypt 来实现过期令牌;但是,如果到期已经内置到 AntiForgery 类的方法中,那么我想避免不必要的复杂性。

【问题讨论】:

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-5 csrf


【解决方案1】:

这个想法是每个易受攻击的 HTTP POST 生成两个令牌并直接发送到服务器。因此,如果您单击表单上的“提交”按钮,则会生成两个令牌:一个 cookie 和一个表单值,均基于用户凭据,请在此处阅读(写得很好):http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages

实际上可以过期的 cookie 令牌是多余的,对系统来说不是必需的,除非尝试匿名身份验证的情况。例如。见这里(第一个答案): MVC 2 AntiForgeryToken - Why symmetric encryption + IPrinciple?

不过,攻击者无法读取您的其他令牌,并且这些令牌是随每个新请求生成的。因此,无需担心过期日期。

编辑:其实这一切都可以在你所指的文章的评论区看到(Mike Wasson);)

【讨论】:

  • 感谢您的回复。我了解这两个令牌如何工作的概念,并了解 HTML 表单与 AJAX 请求的微妙但不同的方法。然而,我的问题具体是令牌是否过期,这在文档或 Mike Wasson 的帖子的 cmets 中没有讨论。干杯!
  • @kbrimington 页面底部的 IAntiForgeryAdditionalDataProvider 部分中的first article above 似乎暗示它没有过期时间。它说你可以实现额外的检查并声明“验证例程可以实现超时(通过检查当前时间与创建令牌时存储的时间)、随机数检查例程或任何其他所需的逻辑。”你有没有得到关于令牌过期的明确答案?
  • @DavidYates,感谢您提请我注意。当时,我得出结论,它们不能过期,并且我建立了自己的过期逻辑。我不记得 2.5 年前当我问我的问题时,这篇文章中出现过这一部分。 IAntiForgeryAdditionalDataProvider 的意图似乎是允许轻松自定义令牌及其验证逻辑,包括实现超时的能力。
【解决方案2】:

您可以查看通过浏览器创建的 cookie。它们是没有过期的会话 cookie。这意味着当您关闭浏览器时,cookie 将被删除。

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 2014-04-26
    • 2015-01-11
    • 1970-01-01
    • 2014-10-03
    • 2015-01-27
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多