我们正在使用objective-c编写iOS移动应用程序,该应用程序可以发布我们的ASP.NET MVC服务器应用程序。在iPhone上,HTTP堆栈(和cookie等)似乎与Safari共享。这让我们对XSRF攻击持开放态度,所以除非我弄错了,否则我们需要用防伪令牌保护POST并用ValidateAntiForgeryTokenAttribute
保护我们的控制器方法。
我会说这个问题是因为我没有正确理解防伪标记产生和验证的机制......特别是,在这种情况下使用的术语“随机数”有些神秘。
由于我们不向客户提供HTML,因此我们无法使用标准@Html.AntiForgeryToken()
,因此我们必须使用AntiForgery.GetTokens
来获取令牌并将其分发给我们的客户。这有一个神秘的第一个参数:oldCookieToken
。目前,我只是将它设置为null
,一切似乎都正常。那么任何人都可以告诉我......将旧令牌提供给令牌生成算法有什么用?如果只有一个令牌发布到我们的iOS应用程序并重复用于多个帖子,这会有问题吗?
答案 0 :(得分:21)
AntiForgery.GetTokens
会尝试重复使用旧的Cookie令牌进行验证。因此,如果您已经拥有要重用的验证令牌,它将尝试使用它而不是生成新的令牌。如果旧令牌无效,它将生成一个新令牌并改为使用它。
因此将null
传递给oldCookieToken
是有效的。它只是告诉GetTokens
始终生成新的Cookie令牌。