Asp.net mvc AntiForgeryToken和ValidateAntiForgeryToken出现意外行为
我已经开始在一些表单中使用AntiForgeryToken来防止跨站点请求伪造。然而,我有一些奇怪的行为,只是想澄清这是一个错误还是只是我做错了什么。我正在表单中使用Asp.net mvc AntiForgeryToken和ValidateAntiForgeryToken出现意外行为,asp.net-mvc,forms,post,csrf,antiforgerytoken,Asp.net Mvc,Forms,Post,Csrf,Antiforgerytoken,我已经开始在一些表单中使用AntiForgeryToken来防止跨站点请求伪造。然而,我有一些奇怪的行为,只是想澄清这是一个错误还是只是我做错了什么。我正在表单中使用Html.AntiForgeryToken()调用。然后在表单发布到的操作方法中使用[ValidateAntiForgeryToken]属性。我现在不用盐 我的理解是,Html.AntiForgeryToken()生成一个名为\uuu RequestVerificationToken的隐藏输入和一个名为\uu RequestVeri
Html.AntiForgeryToken()
调用。然后在表单发布到的操作方法中使用[ValidateAntiForgeryToken]
属性。我现在不用盐
我的理解是,Html.AntiForgeryToken()
生成一个名为\uuu RequestVerificationToken
的隐藏输入和一个名为\uu RequestVerificationToken\u Lw\uuu
的cookie,两者都应该包含相同的值
然而,我所经历的行为是:
有人有什么想法吗?对于第3项,您是否在CSRF场景中包含隐藏字段 AntiForgeryToken的安全性在于,隐藏的输入仅存在于您的域所服务的页面中,不能被其他域复制或捕获。如果您模拟了一个通过隐藏输入的测试,那么这不是一个有效的测试
我建议您阅读Phil Haack的这篇文章:Ok,刚刚发现哪些状态表示它们的序列化方式不同,因此它们似乎包含不同的值。然而,这并不能解释为什么我的cookie值从未更改(直到我删除它并在重新获取页面时生成一个新的cookie),但输入值确实会更改,或者为什么它总是进行验证。这种行为似乎只在安全请求中发生。当我在CSRF站点中按原样提取代码(带有隐藏表单字段),然后提交表单时,它始终在服务器上进行验证。显然,如果代码不在那里,它就不会像预期的那样进行验证。但仍然不知道为什么cookies值保持不变。