【问题标题】:Why is AntiForgeryToken's hidden field not same as its cookies on my machine?为什么 AntiForgeryToken 隐藏字段与我机器上的 cookie 不同?
【发布时间】:2011-11-03 09:58:18
【问题描述】:

我刚刚通过修改默认登录表单使用简单的 ASP.NET MVC 3 示例进行了快速测试。根据this article,隐藏字段__RequestVerificationToken和cookie__RequestVerificationToken_Lw__必须包含与Html.AntiForgeryToken()生成的相同值。但是当我在 Fiddle 中得到它们时并不完全相同,顺便说一下,查看 MVC 3 源代码,方法 GetAntiForgeryTokenAndSetCookie 似乎没有使用盐值来生成 cookie。 MVC 3 有什么变化吗?

忘了说我仍然可以使用普通或 Ajax POST 请求成功登录。

这是来自 Fiddle 的原始日志:

POST http://localhost:51713/Account/LogOn HTTP/1.1
Referer: http://localhost:51713/Account/LogOn
Content-Length: 256
Origin: http://localhost:51713
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA=

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false

【问题讨论】:

  • 附带说明 - AntiForgery 令牌旨在用于应用程序的非公共部分(用户已通过身份验证)。在公共登录表单上使用它们是毫无意义的。
  • 登录表单仅用于测试目的。

标签: asp.net-mvc asp.net-mvc-3 antiforgerytoken


【解决方案1】:

是什么让你认为它们应该是一样的? :) 当然,它们必须在某种程度上具有可比性,但这并不意味着它们的序列化形式必须看起来相同。有一组不同的数据序列化为 cookie(我认为只有“盐”和令牌)和 HTML 标记(盐、令牌、创建时间、用户名)。

如果你对细节感兴趣,就拿ILSpy去寻找System.Web.Mvc.ValidateAntiForgeryTokenAttributeSystem.Web.Mvc.AntiForgeryDataSerializerSystem.Web.Mvc.AntiForgeryDataOnAuthorization方法

【讨论】:

【解决方案2】:

您在问题中引用的文章完全是错误的,因为隐藏字段防伪令牌永远不会与防伪cookie值相同。

我的答案的附加价值是link to interesting article,它描述了 ASP.NET 防伪令牌内部结构。它提供了清晰的步骤来解码和解密 cookie/表单令牌:

BitConverter.ToString(System.Web.Helpers.AntiXsrf.MachineKey45CryptoSystem.Instance.Unprotect(tokenValue))

... 以及后续步骤以匹配 cookie 和表单标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多