Режимы текущей практики

У кого-нибудь есть рекомендации по "лучшим практикам" для Rails и сеансов? Тип сеанса по умолчанию для Rails 3 по-прежнему является CookieStore, не так ли? Я использовал SqlSessionStore некоторое время, и он работал хорошо, но я могу отойти от этого в пользу CookieStore.

Разве не рекомендуется использовать CookieStore для получения конфиденциальной информации, даже с засоленной информацией или лучше хранить в БД?

Ответ 1

Используйте базу данных для сеансов, а не для файлов cookie, которые не должны использоваться для хранения конфиденциальной информации.

Создайте таблицу сеанса с помощью

rake db:sessions:create

Запустите миграцию

rake db:migrate

Убедитесь, что вы также указали рельсы на использование ActiveRecord для управления своими сеансами.

Рельсы 3

конфигурации/Инициализаторы/session_store.rb:

Rails.application.config.session_store :active_record_store

Рельсы 2

конфиг/environment.rb:

config.action_controller.session_store = :active_record_store

Ответ 2

Cookies шифруются по умолчанию в Rails 4

В Rails 4, CookieStore файлы cookie зашифрованы и подписаны по умолчанию:

Если у вас установлен только secret_token, ваши файлы cookie будут подписаны, но не зашифрованы. Это означает, что пользователь не может изменить свой user_id, не зная вашего app секретный ключ, но может легко прочитать их user_id. Это было по умолчанию для приложений Rails 3.

Если у вас установлен secret_key_base, ваши файлы cookie будут зашифрованы. Это шаг дальше, чем подписанные файлы cookie в том, что зашифрованные файлы cookie не могут быть изменены или читать пользователи. Это по умолчанию начинается с Rails 4.

Если у вас установлены как secret_token, так и secret_key_base, ваши файлы cookie будут быть зашифрованным, а подписанные файлы cookie, созданные Rails 3, будут прозрачно читать и шифровать, чтобы обеспечить плавный путь обновления.

Хранилище сеансов активной записи устарело в Rails 4

Этот ответ теперь устарел в отношении Rails 4. Активная запись Журнал сеансов устарел и удален из Rails, поэтому следующее генераторы больше не будут работать:

  • rake db:sessions:create

  • rails generate session_migration

Это было указано в этом ответе. Причина, по которой активная запись Хранилище сеансов было устаревшим, потому что чтение/запись в базу данных не хорошо, когда у вас есть большое количество пользователей, обращающихся к вашему приложению, так как изложенное в это сообщение в блоге:

... одна важная проблема с хранилищем сеансов Active Record заключается в том, что это не масштабируемый. Это создает ненужную нагрузку на вашу базу данных. Как только ваша заявка получает большой объем трафика, таблица базы данных сеансов непрерывно бомбардируются операциями чтения/записи.

С Rails 4 хранилище сеансов Active Record удаляется из ядра и теперь устарела.

Если вы все еще хотите использовать хранилище сеансов Active Record, он по-прежнему доступен как драгоценный камень.

Рекомендации по работе с текущими рельсами

Для более современных практических рекомендаций для сеансов Ruby on Rails я советую вам проверьте последние версии Руководство по безопасности Ruby on Rails.

Ответ 3

Я не верю, что все изменилось в том, как кто-либо на любой платформе должен обрабатывать сеансы на основе файлов cookie. Будьте скептически относитесь ко всему, что выходит за пределы контроля сервера (файлы cookie, сообщения в форме и т.д.). Это общий принцип веб-разработки.

Насколько мне известно, шифрование не изменилось на этом фронте.

Что-то, о чем следует помнить в хранилище cookie, является ограничением объема данных и полученной информацией о том, что эти данные будут отправляться по проводам в каждом запросе, где, поскольку хранилище базы данных передает только идентификатор и данные на сервере.

Ответ 4

FWIW, рельсы 3.1 предлагают запуск

rails generate session_migration

Однако это порождает то же самое перемещение, что и

rake db:sessions:create

Ответ 5

По умолчанию значения Rails мне очень нравятся. CookieStore работает быстро и должен охватывать большинство случаев использования. Конечно, вы ограничены 4kb, и ваши данные будут видны пользователю, но путь Rails должен использовать только сеанс для таких вещей, как целые идентификаторы и базовые строковые значения. Если вы пытаетесь хранить объекты или конфиденциальную информацию в сеансе вы, вероятно, делаете это неправильно.