2013-04-24 46 views
16

我们在Objective-C,使职位,以我们的ASP.NET MVC的服务器应用程序编写iOS版移动应用。在iPhone上,HTTP堆栈(和cookie等)似乎与Safari共享。这让我们对XSRF攻击持开放态度,所以除非我弄错了,否则我们需要用防伪标记来保护POST,并用ValidateAntiForgeryTokenAttribute保护我们的控制器方法。AntiForgery.GetTokens:什么是oldCookieToken参数的目的是什么?

我将通过说我不能正确理解防伪令牌生成和验证的机制来限定这个问题......特别是,在这种情况下使用的术语“随机数”有点神秘。

因为我们没有向客户端发送HTML,所以我们不能使用标准@Html.AntiForgeryToken(),所以我们不得不使用AntiForgery.GetTokens来获取和分发令牌给我们的客户。这有一个神秘的第一个参数:oldCookieToken。此刻,我只是将它设置为null,一切似乎很好地工作。所以任何人都可以告诉我...将旧标记提供给标记生成算法有什么用处?如果只有一个令牌发布到我们的iOS应用并重复用于多个帖子,这是否会有问题?

回答

17

AntiForgery.GetTokens将尝试重用为了进行验证的旧Cookie令牌。所以如果你已经有了一个你想要重用的验证令牌,它会尝试使用它,而不是生成一个新的验证令牌。如果旧标记无效,它将生成一个新标记并使用它。

所以传递到nulloldCookieToken有效。它只是告诉GetTokens总是生成一个新的cookie令牌。

+0

嗯 - 我发现这很有用。不确定为什么它没有被标记为答案。不过谢谢。 – 2014-04-19 19:02:10

+0

@PaulDeen:现在是:-) – spender 2014-05-10 22:51:08

+3

注意:如果您传入有效的oldCookieToken,则newCookieToken将始终为空,与oldCookieToken的值不同。 – Alex 2014-09-10 02:58:52