我已经开始在我的一些表单中使用 AntiForgeryToken 来防止跨站点请求伪造。但是我得到了一些奇怪的行为,只是想澄清这是一个错误还是我做错了什么。我正在使用Html.AntiForgeryToken()
我的表单中的调用。[ValidateAntiForgeryToken]
然后,我在表单发布到的操作方法中使用该属性。在这一点上,我没有使用盐。
我的理解是,它会Html.AntiForgeryToken()
生成一个名为 的隐藏输入和一个名为__RequestVerificationToken
的 cookie __RequestVerificationToken_Lw__
,它们都应该包含相同的值。
然而,我遇到的行为是:
- 无论您获取页面多少次,cookie 始终具有相同的值
- 每次获取页面时隐藏的输入都有不同的值
- ValidateAntiForgeryToken 每次都进行验证,即使来自 CSRF 场景中的不同站点。
- 如果我更改了外部站点中隐藏输入的值,则令牌不会验证(预期的行为,但为什么当隐藏输入/cookie 值不同时它会验证?)
有人有什么想法吗?