我正在ASP.NET MVC 5应用程序中实现CSRF防伪保护.特别是,我在ASP.NET网站上引用Mike Wasson描述的方法来保护响应AJAX请求的控制器方法,例如在WebAPI控制器中.此方法使用AntiForgery.GetTokens方法生成基于用户的加密防伪标记,然后使用AntiForgery.Validate验证提交的标记属于当前用户.
我的问题是:这些令牌是否有生存时间?它们会过期吗?如果有,它们有多长时间有用?文档是关于这个主题的静音.
我不想在我的系统中允许非过期令牌.此外,我希望在请求新令牌之前与客户端通信他们有多少时间.如果需要,我可以使用FormsAuthentication.Encrypt实现过期令牌; 但是,如果在AntiForgery类的方法中已经存在过期,那么我想省去不必要的复杂性.
在ASP.NET MVC中,ValidateAntiForgeryTokenAttribute调用的验证逻辑允许使用匿名防伪标记,即没有任何用户特定信息(如IIdentity.Name或ClaimUid)的标记.
因此,如果未使用声明且登录后未设置HttpContext.User(并非罕见),则系统的恶意用户可以使用恶意用户自己的合法获取的防伪令牌对任何其他用户发起CSRF攻击.
这似乎并不可取.为什么允许使用匿名令牌?