我正在ASP.NET MVC 5应用程序中实现CSRF防伪保护。特别是,我引用了Mike Wasson在ASP.NET website上描述的方法来保护响应AJAX请求的控制器方法,例如在WebAPI控制器中。此方法使用AntiForgery.GetTokens方法生成基于用户的加密防伪标记,然后AntiForgery.Validate验证提交的标记是否属于当前用户。
我的问题是:这些令牌还有生存时间吗?它们会过期吗?如果有,它们有多长时间有用?文档对这个主题是静音的。
我不想在我的系统中允许非过期令牌。此外,我希望在请求新令牌之前与客户端通信他们有多少时间。如果需要,我可以使用FormsAuthentication.Encrypt来实现过期令牌;但是,如果AntiForgery
类已经过期,那么方法,然后我想为自己节省不必要的复杂性。
答案 0 :(得分:1)
这个想法是每个易受攻击的HTTP POST生成两个令牌并直接发送到服务器。因此,如果单击表单上的“提交”按钮,将生成两个令牌:cookie和表单值,两者都基于用户凭据,在此处阅读(不错的书面文章):http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages < / p>
实际上可以过期的cookie令牌是冗余的,除了尝试匿名身份验证的情况之外,系统不需要。例如。看到这里(第一个答案): MVC 2 AntiForgeryToken - Why symmetric encryption + IPrinciple?
但是,您的另一个令牌对于攻击者来说是不可读的,并且每个新请求都会生成这些令牌。因此,无需担心失效日期。
编辑:实际上,这一切也可以在您所指的文章的评论部分阅读(Mike Wasson);)
答案 1 :(得分:0)
您可以查看通过浏览器创建的cookie。它们是没有过期的会话cookie。这意味着当您关闭浏览器时,cookie将被删除。