【问题标题】:Antiforgery.Validate() does not seem to work? CSRF issueAntiforgery.Validate() 似乎不起作用? CSRF 问题
【发布时间】:2018-07-05 08:51:30
【问题描述】:

我已将下面的代码放入我的表单中。然后,该请求将在其 cookie 中显示一个令牌,并且在生成我的 html 时还会创建一个隐藏字段。请注意,cookie 和隐藏字段的值不同。

<%= System.Web.Helpers.AntiForgery.GetHtml() %> 

每次我回发时,我都有如下所示的验证器。

if (IsPostBack)
{
   AntiForgery.Validate();
}
  1. 奇怪的是,即使我强行更改隐藏字段中的 cookie(使用 burp 之类的 MITM 软件)。验证器甚至不会检测到令牌已被更改。

  2. 我已经列出了生成的令牌(刷新页面几次)并尝试使用列出的令牌之一来处理最新的请求。不出所料,验证器没有发现错误。

  3. 我读到令牌是基于会话的,所以我尝试在另一个会话(另一个用户)上使用令牌。验证器仍然没有捕获任何东西。

  4. 更改 cookie 中的令牌会捕获错误,但该 cookie 令牌是恒定的,并且对于所有表单都是相同的。

这个问题有什么错误或任何其他缺失的部分吗?

【问题讨论】:

标签: c# asp.net security csrf x-xsrf-token


【解决方案1】:

好吧,建议OWASP Cheatsheet 使用/检查 ViewStateUserKey 并重复提交 cookie 值。您可以查看this answer

虽然这只会保护来自 Web 表单的请求。在其他情况下,例如向服务器发送 AJAX POST 将没有令牌。因此,在这种情况下,您可以使用自动生成的令牌实现自定义标头并在服务器端检查它。 https://security.stackexchange.com/questions/23371/csrf-protection-with-custom-headers-and-without-validating-token

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2016-09-23
    • 2016-11-29
    • 2016-02-01
    • 2020-09-23
    • 2010-12-05
    相关资源
    最近更新 更多