Режимы текущей практики
У кого-нибудь есть рекомендации по "лучшим практикам" для 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, поэтому следующее
генераторы больше не будут работать:
Это было указано в этом ответе. Причина, по которой активная запись
Хранилище сеансов было устаревшим, потому что чтение/запись в базу данных не
хорошо, когда у вас есть большое количество пользователей, обращающихся к вашему приложению, так как
изложенное в это сообщение в блоге:
... одна важная проблема с хранилищем сеансов 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 должен использовать только сеанс для таких вещей, как целые идентификаторы и базовые строковые значения. Если вы пытаетесь хранить объекты или конфиденциальную информацию в сеансе вы, вероятно, делаете это неправильно.