2013-04-24 26 views
16

Piszemy aplikację mobilną iOS na cel-c, która wysyła posty do naszej aplikacji serwera ASP.NET MVC. W telefonie iPhone stos HTTP (i pliki cookie itp.) Wydają się być udostępniane w Safari. To pozostawia nas otwartych na ataki XSRF, więc jeśli się nie mylę, musimy chronić POST za pomocą tokenów przeciwdziałających fałszerstwom i chronić nasze metody kontrolerów za pomocą ValidateAntiForgeryTokenAttribute.AntiForgery.GetTokens: jaki jest cel parametru oldCookieToken?

Będę kwalifikować to pytanie, mówiąc, że nie rozumiem właściwie mechanizmu generowania i weryfikacji żetonów antykradzieży ... w szczególności termin "nonce" używany w tym kontekście jest nieco mistyczny.

Ponieważ nie dostarczamy HTML do klienta, nie możemy użyć standardu @Html.AntiForgeryToken(), więc zamiast tego musimy użyć AntiForgery.GetTokens, aby nabyć i rozpowszechnić tokeny dla naszych klientów. Ma to tajemniczy pierwszy parametr: oldCookieToken. W tej chwili ustawiłem go na null i wszystko wydaje się działać dobrze. Czy ktoś może mi powiedzieć ... jaki jest pożytek z dostarczenia starego tokena do algorytmu generującego token? Jeśli tylko jeden token zostanie wydany naszej aplikacji na iOS i ponownie użyty do wielu postów, czy to będzie problematyczne?

Odpowiedz

17

AntiForgery.GetTokens spróbuje ponownie wykorzystać stary token do sprawdzania poprawności. Jeśli masz już token weryfikacyjny, który chcesz ponownie wykorzystać, spróbujesz go użyć zamiast wygenerować nowy. Jeśli stary token jest nieprawidłowy, wygeneruje nowy i użyje go zamiast niego.

Przekazanie null do oldCookieToken jest ważne. Po prostu mówi GetTokens, aby zawsze generować nowy token cookie.

+0

Cóż - uznałem to za przydatne. Nie wiesz, dlaczego nie została oznaczona jako odpowiedź. W każdym razie dzięki. –

+0

@PaulDeen: Jest teraz :-) – spender

+3

Uwaga: Jeśli przekażesz prawidłowy oldCookieToken, newCookieToken będzie zawsze pusty, a nie tak samo jak oldCookieToken. – Alex