AntiForgery.GetTokens:oldCookieToken参数的目的是什么?

时间:2013-04-24 12:26:01

标签: c# ios asp.net-mvc csrf antiforgerytoken

我们正在使用objective-c编写iOS移动应用程序,该应用程序可以发布我们的ASP.NET MVC服务器应用程序。在iPhone上,HTTP堆栈(和cookie等)似乎与Safari共享。这让我们对XSRF攻击持开放态度,所以除非我弄错了,否则我们需要用防伪令牌保护POST并用ValidateAntiForgeryTokenAttribute保护我们的控制器方法。

我会说这个问题是因为我没有正确理解防伪标记产生和验证的机制......特别是,在这种情况下使用的术语“随机数”有些神秘。

由于我们不向客户提供HTML,因此我们无法使用标准@Html.AntiForgeryToken(),因此我们必须使用AntiForgery.GetTokens来获取令牌并将其分发给我们的客户。这有一个神秘的第一个参数:oldCookieToken。目前,我只是将它设置为null,一切似乎都正常。那么任何人都可以告诉我......将旧令牌提供给令牌生成算法有什么用?如果只有一个令牌发布到我们的iOS应用程序并重复用于多个帖子,这会有问题吗?

1 个答案:

答案 0 :(得分:21)

AntiForgery.GetTokens会尝试重复使用旧的Cookie令牌进行验证。因此,如果您已经拥有要重用的验证令牌,它将尝试使用它而不是生成新的令牌。如果旧令牌无效,它将生成一个新令牌并改为使用它。

因此将null传递给oldCookieToken是有效的。它只是告诉GetTokens始终生成新的Cookie令牌。