Rails sessions aktualne praktyki

Ktoś ma jakieś" najlepsze praktyki " porady dla Rails i sesji? Domyślnym typem sesji dla Rails 3 jest nadal CookieStore, prawda? Używałem SqlSessionStore przez jakiś czas i działało dobrze, ale mogę odejść od tego na rzecz CookieStore.

Czy nadal nie jest dobrym pomysłem, aby używać CookieStore dla wrażliwych informacji, nawet z solonych informacji lub jest to lepiej przechowywane w DB?

Author: Lukas, 2010-04-07

5 answers

Używaj bazy danych do sesji zamiast domyślnego pliku cookie, który nie powinien być używany do przechowywania wysoce poufnych informacji

Utwórz tabelę sesji za pomocą

rake db:sessions:create

Uruchom migrację

rake db:migrate

Upewnij się również, że rails używa ActiveRecord do zarządzania sesjami.

Rails 3

Config / initializers / session_store.rb:

Rails.application.config.session_store :active_record_store

Rails 2

Config / environment.rb:

config.action_controller.session_store = :active_record_store
 102
Author: Volcanic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-13 11:13:39

Pliki cookie są domyślnie szyfrowane w Rails 4

W Rails 4, CookieStore Pliki cookie są domyślnie szyfrowane i podpisywane:

Jeśli masz tylko secret_token ustawione, Twoje pliki cookie zostaną podpisane, ale nie zaszyfrowane. Oznacza to, że użytkownik nie może zmienić swojego user_id nie znając swojego tajny klucz aplikacji, ale może łatwo odczytać ich user_id. To było domyślne dla aplikacji Rails 3.

Jeśli masz secret_key_base ustawione, Twoje pliki cookie zostaną zaszyfrowane. This goes a krok poza podpisanymi Plikami cookie nie można zmieniać zaszyfrowanych plików cookie lub czytane przez użytkowników. Jest to domyślne ustawienie rozpoczynające się w Rails 4.

Jeśli masz zarówno secret_token jak i secret_key_base ustawione, Twoje pliki cookie będą być zaszyfrowane, a podpisane pliki cookie generowane przez Rails 3 będą transparentne odczyt i szyfrowanie w celu zapewnienia płynnej ścieżki aktualizacji.

Active Record Session Store jest przestarzały w Rails 4

Ta odpowiedź jest obecnie nieaktualna w odniesieniu do Rails 4. Na Active Record Session Store został przestarzały i usunięty z Rails, więc następujące Generatory nie będą już działać:

  • rake db:sessions:create

  • rails generate session_migration

Zwrócono na to uwagę w tej odpowiedzi . Powodem, dla którego rekord aktywny Magazyn sesji był przestarzały, ponieważ odczyty/zapisy do bazy danych nie skaluj dobrze, gdy masz dużą liczbę użytkowników uzyskujących dostęp do Twojej aplikacji, ponieważ napisane w ten blog post :

...jednym z głównych problemów ze sklepem sesji Active Record jest to, że nie jest skalowalne. Niepotrzebnie obciąża twoją bazę danych. Po złożeniu wniosku otrzymuje dużą ilość ruchu, tabela bazy danych sesji jest stale bombardowane operacjami odczytu/zapisu.

Od Rails 4, magazyn sesji Active Record został usunięty z rdzenia ramy i jest obecnie przestarzały.

Jeśli nadal chcesz używać aktywnego Zapis sesji, jest jeszcze dostępny jako klejnot .

Najlepsze Praktyki Sesji Rails

Aby uzyskać więcej aktualnych najlepszych praktyk dla sesji Ruby on Rails, radzę ci zapoznaj się z najnowszymi wersjami Ruby on Rails Security Guide.

 44
Author: Community,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:20

Nie wierzę, że coś się zmieniło w tym, jak ktoś na jakiejkolwiek platformie powinien obsługiwać sesje oparte na plikach cookie. Bądź sceptyczny wobec wszystkiego, co przechodzi poza kontrolę serwera (pliki cookie, formularz postów, itp.) To ogólna zasada tworzenia stron internetowych.

Jeśli chodzi o szyfrowanie, To Nie wiem, czy coś się zmieniło na tym froncie.

Warto pamiętać o tym, że w sklepie z ciasteczkami jest limit ilości danych, a to, że dane te będą wysyłane na kabel w każdym request, gdzie jako magazyn bazy danych przekazuje tylko id, a dane żyją na serwerze.

 9
Author: Tilendor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-06 21:12:11

FWIW, rails 3.1 sugeruje uruchamianie

rails generate session_migration

Jednakże generuje to dokładnie taką samą migrację jak

rake db:sessions:create
 4
Author: Nate Milbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-21 22:11:05

Domyślne Rails wydają mi się całkiem dobre - CookieStore jest szybki i powinien obejmować większość przypadków użycia. Oczywiście, że masz ograniczone do 4kb i Twoje dane będą widoczne dla użytkownika, ale rails używa sesji tylko dla takich rzeczy jak integer ID i podstawowe wartości łańcuchowe - jeśli próbujesz przechowywać obiekty lub wysoce poufne informacje w sesji, prawdopodobnie robisz to źle.

 2
Author: Yarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-12 03:48:55