我们正在用Objective-C语言编写一个iOS移动应用程序,该应用程序会将帖子发布到我们的ASP.NET MVC服务器应用程序中。在iPhone上,HTTP堆栈(和cookie等)似乎已与Safari共享。这使我们容易受到XSRF攻击,因此,除非我没有弄错,否则我们需要使用防伪 token 保护POST并使用ValidateAntiForgeryTokenAttribute保护我们的 Controller 方法。

我将通过不正确理解生成和验证反伪造 token 的机制来证明这个问题的正确性……尤其是,在这种情况下使用的“nonce”一词有些神秘。

因为我们没有将HTML交付给客户端,所以我们不能使用标准的@Html.AntiForgeryToken(),因此我们必须使用 AntiForgery.GetTokens 来获取 token 并将其分发给我们的客户端。它有一个神秘的第一个参数:oldCookieToken。此刻,我只是将其设置为null,一切似乎都可以正常工作。谁能告诉我...将旧 token 提供给 token 生成算法有什么用?如果仅将单个 token 发布到我们的iOS应用并重复用于多个帖子,这会出现问题吗?

最佳答案

AntiForgery.GetTokens将尝试重用旧的cookie token 以进行验证。因此,如果您已经具有要重用的验证 token ,它将尝试使用它而不是生成一个新的 token 。如果旧 token 无效,它将生成一个新 token 并使用它。

因此,将null传递给oldCookieToken是有效的。它只是告诉GetTokens始终生成一个新的cookie token 。

关于c# - AntiForgery.GetTokens : what is the purpose of the oldCookieToken parameter?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16192019/

10-11 00:58