c# - ASP.NET MVC CSRF 防伪 token 会过期吗?

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

我正在我的 ASP.NET MVC 5 应用程序中实现 CSRF 防伪保护。特别是,我引用了 Mike Wasson 在 ASP.NET website 上描述的方法。保护响应 AJAX 请求的 Controller 方法,例如在 WebAPI Controller 中。这种方法利用了 AntiForgery.GetTokens生成基于用户的加密防伪 token 的方法,然后是 AntiForgery.Validate验证提交的 token 是否属于当前用户。

我的问题是:这些代币有生存时间吗?它们会过期吗?如果是,它们的有效期有多长?该文档在该主题上没有提及。

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

最佳答案

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

实际上可以过期的 cookie token 是多余的,除了尝试匿名身份验证的情况外,系统不需要它。例如。看这里(第一个答案): MVC 2 AntiForgeryToken - Why symmetric encryption + IPrinciple?

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

编辑:其实,这一切也可以在您所指的文章的评论部分阅读(Mike Wasson);)

关于c# - ASP.NET MVC CSRF 防伪 token 会过期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937307/

相关文章:

c# - 确定 DNX 项目的当前路径

jquery - Ajax 发布到 Controller 操作跨域

asp.net-mvc - 寻找一个可以接受 MVC3 中的类属性的 Html.SubmitButton 助手

c# - 如何在 Visual Studio 2008 中永久禁用区域折叠

c# - 将 Winforms 控件置于最前面

c# - 在 CaSTLe Windsor 中,如何覆盖使用 FromThisAssembly() 注册的类型

javascript - 如何从 Angularjs 服务响应中获取数据到 Controller 作用域对象

asp.net-web-api - WebAPI : QueryString-Parameter is routing-relevant

c# - 与 ASP.NET WEB API 的动态模型绑定(bind)

c# - 部署后无法连接到 Azure SignalR 服务