ASP.NET MVC CSRF Anti-Forgery Tokens是否会过期?

问题描述 投票:10回答:2

我正在ASP.NET MVC 5应用程序中实现CSRF防伪保护。特别是,我引用了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
2个回答
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);)


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.