Antiforgery.Validate()似乎不起作用? CSRF问题

时间:2018-01-26 00:35:05

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

我已将代码放在我的表单中。然后,请求将在其cookie中显示一个标记,并且在生成我的html时也会创建一个隐藏字段。请注意,cookie和隐藏字段都具有不同的值。

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

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

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

  2. 我已经列出了生成的令牌(刷新了几次页面),并尝试使用列出的一个来操纵最新的请求。毫不奇怪,验证器没有发现错误。

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

  4. 更改Cookie中的令牌会捕获错误,但该Cookie令牌是常量,对所有表单都是相同的。

  5. 这个问题是否有任何错误或任何其他缺失的部分?

1 个答案:

答案 0 :(得分:0)

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

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