2013-04-24 260 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