2011-10-12 13 views
21

Zauważyłem, że jeśli publikujesz z nieważnym tokenem CSRF, tory/devise automatycznie Cię wylogowują.Szyny Token CSRF - czy wygasają?

Mam aplikację, która nie odświeża strony, a użytkownicy siedzą na stronie w czasie rzeczywistym przez długi czas. Co jakiś czas użytkownik zostaje wyrzucony. Zastanawiam się, czy token CSRF wygasa, co czyni go nieważnym.

Dlatego próbuję się nauczyć, czy wygasają tokeny CSRF Railsów? Czy jest gdzieś czas?

Dzięki

+0

Czy możesz opisać, co robi użytkownik po tym, jak przez jakiś czas będzie bezczynny (HTTP POST aktualizacji statusu, Zdobywanie nowych danych itd.) – Nick

Odpowiedz

24

ochronę CSRF w Rails działa poprzez przechowywanie wartość losową jako pole w formularzu zostaną przedłożone, a także w sesji użytkownika. Jeśli wartości nie są zgodne po przesłaniu formularza, Rails odrzuca wniosek o przesłanie formularza.

Jeśli używasz domyślnego magazynu sesji plików cookie w Railsach, sesje nie wygasną (do czasu, gdy ciasteczko to zrobi). Jeśli używasz czegoś innego (sesji lub sesji z zabezpieczeniem bazy danych), to tak, jeśli te sesje wygasną, przesłanie formularza zakończy się niepowodzeniem z błędem CSRF.

Jeśli więc używasz sesji opartych na plikach cookie (ustawienie domyślne), sprawdź datę ważności pliku cookie. Jeśli to wygląda OK, to prawdopodobnie jakiś inny problem.

+0

Nie podano czasu wygaśnięcia pliku cookie csrf. Czy to plik cookie sesji? – Ethan

+0

Jest przechowywany w sesji, tak. Jest to tylko plik cookie sesji, jeśli nie używasz sesji z obsługą ActiveRecord. – Lambart

+0

Ta odpowiedź naprawdę pomogła mi zrozumieć pewne koncepcje i rozwiązać znaleziony błąd. Dzięki! W każdym razie naprawdę chciałbym zrozumieć, dlaczego ciasteczko jest potrzebne? Jeśli szyny podadzą ci uwierzytelniający_token i prześlesz formularz z tym samym tokenem, dlaczego ciasteczko będzie potrzebne? Próbowałem przesłać formularz po wyczyszczeniu pamięci podręcznej i otrzymałem 'ActionController :: InvalidAuthenticityToken'. Czy token w formularzu zostaje zapisany w sesji, a po otrzymaniu formularza wysyła zarówno plik cookie, jak i formularz i sprawdza oba tokeny? Dzięki. –

Powiązane problemy