【问题标题】:Anti-forgery token is not reused防伪令牌不被重复使用
【发布时间】:2013-09-06 11:03:51
【问题描述】:

当我阅读 ASP.NET MVC 实现的防伪系统生成一个可在同一会话中重用的令牌时,我的问题是为什么每次我在我的应用程序中生成一个新表单时这个令牌都会改变?我说的是隐藏输入字段,而不是 cookie 值。

谢谢。

【问题讨论】:

    标签: asp.net-mvc antiforgerytoken


    【解决方案1】:

    取自 Professional ASP.NET.MVC 3 book

    令牌验证 ASP.NET MVC 包含一种防止 CSRF 的好方法 攻击,它的工作原理是验证用户 向您的网站提交数据是自愿的。最简单的方法 这样做是将隐藏的输入嵌入到每个表单请求中 包含唯一值。您可以通过 HTML Helpers 执行此操作 包括这种形式的各种形式:

    <form action=”/account/register”
    > method=”post”> <@Html.AntiForgeryToken()> … </form>
    

    Html.AntiForgeryToken 将输出一个加密值作为隐藏 输入:这个值 将匹配存储为会话 cookie 中的另一个值 用户的浏览器。发布表单时,将匹配这些值 使用 ActionFilter:

    [ValidateAntiforgeryToken] public ActionResult
    > Register(…)
    

    【讨论】:

    • 是的,我理解这个机制,但它不应该在隐藏字段中生成的令牌下次重用吗?或者我理解错了?可能与我最近从 MVC3 到 MVC4 的更新有关?
    【解决方案2】:

    没有。令牌没有被重复使用。

    每次页面刷新都会在表单输入中生成一个新值(以及 Cookie,以防它无效或不存在)。提交后,服务器将尝试将表单值与 Cookie 值进行匹配。

    【讨论】:

    • 我更新了答案。 cookie 仅在无效时重新生成。
    猜你喜欢
    • 2017-10-29
    • 2011-11-07
    • 1970-01-01
    • 2015-01-11
    • 2019-12-23
    • 2019-03-05
    • 2018-01-16
    • 2013-11-27
    • 2015-05-11
    相关资源
    最近更新 更多