【发布时间】:2011-12-15 20:01:26
【问题描述】:
我已经开始在我的一些表单中使用 AntiForgeryToken 来防止跨站点请求伪造。但是我得到了一些奇怪的行为,只是想澄清这是一个错误还是我做错了什么。我在我的表单中使用Html.AntiForgeryToken() 调用。然后我在表单发布到的操作方法中使用[ValidateAntiForgeryToken] 属性。我现在没有使用盐。
我的理解是Html.AntiForgeryToken() 会生成一个名为__RequestVerificationToken 的隐藏输入和一个名为__RequestVerificationToken_Lw__ 的cookie,它们应该包含相同的值。
然而,我遇到的行为是:
- 无论您使用多少次,cookie 始终具有相同的值 获取页面
- 每次获取页面时隐藏的输入都有不同的值
- ValidateAntiForgeryToken 每次都进行验证,即使是从 CSRF 场景中的不同站点。
- 如果我在国外网站更改隐藏输入的值, 令牌不验证(预期的行为,但它为什么验证 当隐藏的输入/cookie 值不同时?)
有人有什么想法吗?
【问题讨论】:
-
好的,刚刚发现stackoverflow.com/questions/7186253/… 指出它们的序列化方式不同,因此它们似乎包含不同的值。然而,这并不能解释为什么我的 cookie 值永远不会改变(直到我删除它并在我重新获取页面时生成一个新的值),但输入值确实改变了,或者为什么它总是有效。
-
这种行为似乎只发生在安全请求中。
标签: asp.net-mvc forms post csrf antiforgerytoken