【问题标题】:ASP.NET MVC Anti Forgery Token is not one-time (per request) token?ASP.NET MVC Anti Forgery Token 不是一次性(每个请求)令牌?
【发布时间】:2015-08-06 20:40:04
【问题描述】:

我阅读了很多文章并进行了一些自己的测试,以及我从测试中看到的源代码(IsCookieTokenValid and GenerateCookieToken - 你可以看到硬编码的IsSessionToken = true) ASP.NET Anti Forgery Token 是每个会话,而不是每个请求(或 POST 请求等)。因此存储在 cookie 中的令牌在用户会话期间保持不变。 但是表单上的标记会随着每次请求(页面刷新)而改变(它是新的)。

我检查了使用旧 form 令牌提交的表单是否仍然有效,并且它们仍然有效。那么,如果旧令牌仍然有效并且 cookie 中的令牌在用户会话期间保持不变,那么每次生成新表单令牌的意义何在?

我在代码中没有看到任何设置来更改此行为并使令牌“一次性”。唯一的选择或解决方案是删除 cookie,这将强制生成新的。正确的?还有其他想法吗?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    我最终修改了 ASP.NET MVC 库并将设置 GenerateOnetimeToken 添加到 AntiForgeryConfig 以便能够为每个页面请求(AntiForgeryToken() 帮助程序调用)生成一对新的令牌(cookie 和表单令牌)。

    Here is ASP.NET MVC 5 branch for this change.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-02
      • 2016-11-19
      • 2013-12-24
      • 1970-01-01
      • 2019-03-11
      • 2019-06-30
      • 1970-01-01
      • 2014-08-27
      相关资源
      最近更新 更多