【问题标题】:ASP.NET MVC - does AntiForgeryToken prevent the user from changing posted form values?ASP.NET MVC - AntiForgeryToken 是否阻止用户更改发布的表单值?
【发布时间】:2009-10-31 18:16:29
【问题描述】:

我了解 ASP.NET MVC 中的 AntiForgeryToken 功能确实可以防止跨站点攻击。

但是,它会阻止在 POST 之前更改表单值吗?

例如,恶意攻击者可能会发现评级页面始终包含一个包含已评级实体 ID 的隐藏字段,并创建 POST 请求以人为地对他自己的所有实体进行高评级。

确保 GET 和 POST 之间的表单值没有更改的首选方法是什么?

【问题讨论】:

    标签: asp.net-mvc security


    【解决方案1】:

    AntiForgeryToken 可防止恶意网站诱使用户使用与原始表单相同的表单并将其发布到原始站点。它不会阻止您描述的场景。以下是攻击者如何继续绕过令牌:

    1. 黑客向表单发送 GET 请求。
    2. 他读取AntiForgeryToken生成的cookie的值
    3. 他通过发送 cookie、与 cookie 具有相同值的 RequestVerificationToken 隐藏字段和修改后的实体 ID 向处理表单操作的 url 进行 POST。

    正如您所看到的,与您没有使用 AntiForgeryToken 的唯一区别是黑客需要发送一个额外的 GET 请求来读取令牌的值。

    除了验证提交表单的用户(我想为了投票用户必须经过身份验证)不是该表单的所有者之外,绝对没有办法阻止攻击者修改隐藏字段的值他投票支持的实体 ID。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2018-06-11
      • 2015-08-19
      • 2017-01-18
      • 2023-04-09
      相关资源
      最近更新 更多