AntiForgeryToken和ValidateAntiForgeryToken出现意外行为

时间:2011-10-26 15:19:46

标签: asp.net-mvc forms post csrf antiforgerytoken

我已经开始在我的某些表单中使用AntiForgeryToken来防止跨站点请求伪造。然而,我得到一些奇怪的行为,只是想澄清这是一个错误还是只是我做错了什么。我在表单中使用Html.AntiForgeryToken()调用。然后,我在表单发布的操作方法中使用[ValidateAntiForgeryToken]属性。我现在不使用盐。

我的理解是Html.AntiForgeryToken()生成名为__RequestVerificationToken的隐藏输入和名为__RequestVerificationToken_Lw__的Cookie,它们都应包含相同的值。

我遇到的行为是:

  1. 无论你多少次,cookie总是具有相同的值 获取页面
  2. 每次获取页面时隐藏的输入都有不同的值
  3. ValidateAntiForgeryToken每次都会验证,即使是来自a CSRF场景中的不同站点。
  4. 如果我更改了外国网站中隐藏输入的值,则 令牌未验证(预期的行为,但为什么验证 当隐藏的输入/ cookie值不同时?)
  5. 有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

对于3号,您是否在CSRF场景中包含隐藏字段?

AntiForgeryToken的安全性在于隐藏的输入仅存在于您的域所服务的页面中,并且不能被其他域复制或捕获。如果你已经模拟了一个通过隐藏输入的测试,那么这不是一个有效的测试。

我建议你阅读Phil Haack的这篇文章:Anatomy of a Cross-site Request Forgery Attack