Napisałeś: Biorąc pod uwagę, że Rails cookie sesji wygasa dopiero po zakończeniu sesji przeglądania (czyli gdy przeglądarka jest zamknięta), jakie są w jaki sposób można zmienić to ciasteczko (i token CSRF) bez zamykania przeglądarki?
Po pierwsze, twoja hipoteza jest ważna. Jednak sposób, w jaki tam dotarłeś, może być warty rozważenia.
Przedstawione domniemanie wymaga dwóch poziomów.
Po pierwsze: przechowywany plik cookie nie zostaje usunięty po zakończeniu sesji przeglądania, chyba że coś zostało zakodowane w ten sposób; plik cookie jest prawdopodobnie trwały do czasu przekroczenia limitu czasu cookie, więc prawdopodobnie następny dostęp do strony będzie korzystał ze starego tokena, ale ponieważ programiści zazwyczaj pozwalają na "nowe logowanie" w celu odświeżenia strony, prawdopodobnie odświeżą token na ten czas. Zobacz odpowiedź @ Shikhar-Mann, aby lepiej zrozumieć sign_out_user.
Po drugie: plik cookie nie musi być zmieniany dla tego problemu, jest to niedopasowanie tokenu CSRF, który jest problemem.
Pytanie podstawowe powinno brzmieć: jakie są sposoby na to, że możemy mieć niedopasowany token CSRF, na który łatwiej byłoby odpowiedzieć: stare dane na kliencie z powodu długiego oczekiwania, co powoduje przekroczenie limitu czasu na serwerze, co unieważnia token CSRF podczas opóźnienia. Jeśli strona internetowa nie jest skonfigurowana/utworzona, aby również limitu czasu i przekierowania, klient/użytkownik nigdy by się nie dowiedział.
Czy mogę również zasugerować, że CSRF NIE będzie trwał? Naprawdę nie jest to wartościowe, jeśli możesz uzyskać dostęp do danych formularza; zwykle tworzę ukryte pole z danymi CSRF i używam go, aby zamiast tego przesłać ponownie. CSRF nie żyje bardzo długo, a dane sesji są utrzymywane.
dzięki. Dana ścieżka dotyczy tylko uwierzytelnionych użytkowników, więc nie sądzę, że wylogowali się przed wyjątkiem CSRF. – djb
Prawda. Więc kiedy CSRF zostanie zmieniony z nieznanych przyczyn. Zostały wylogowane. Czy możesz wykluczyć, że użytkownicy w tym przypadku celowo edytują CSRF? –
Nie z absolutną pewnością, ale jest to bardzo mało prawdopodobne. Czy twoim zdaniem nie ma innego sposobu, aby token kiedykolwiek stał się nieważny? – djb