Tout le monde a des conseils sur les "meilleures pratiques" pour Rails et sessions? Le type de session par défaut pour Rails 3 est toujours CookieStore, n'est-ce pas? J'ai utilisé SqlSessionStore pendant un certain temps) et cela a bien fonctionné, mais je peux m'éloigner de cela en faveur de CookieStore.
N'est-ce pas une bonne idée d'utiliser CookieStore pour les informations sensibles, même avec des informations salées ou est-ce mieux stocké dans la base de données?
Utilisez la base de données pour les sessions au lieu de la valeur par défaut basée sur les cookies, qui ne doit pas être utilisée pour stocker des informations hautement confidentielles
Créez la table de session avec
rake db:sessions:create
Exécutez la migration
rake db:migrate
Assurez-vous également d'indiquer à Rails d'utiliser ActiveRecord pour gérer également vos sessions.
config/initializers/session_store.rb:
Rails.application.config.session_store :active_record_store
config/environment.rb:
config.action_controller.session_store = :active_record_store
Dans Rails 4, CookieStore les cookies sont cryptés et signés par défaut:
Si vous n'avez que
secret_token
set, vos cookies seront signés, mais pas cryptés. Cela signifie qu'un utilisateur ne peut pas modifier sonuser_id
sans connaître la clé secrète de votre application, mais peut facilement lire leuruser_id
. C'était la valeur par défaut pour Rails 3 applications.Si tu as
secret_key_base
set, vos cookies seront cryptés. Cela va plus loin que les cookies signés dans la mesure où les cookies cryptés ne peuvent pas être modifiés ou lus par les utilisateurs. Il s'agit de la valeur par défaut commençant par Rails 4.Si vous avez les deux
secret_token
etsecret_key_base
set, vos cookies seront cryptés et les cookies signés générés par Rails 3 seront lus et cryptés de manière transparente pour fournir un chemin de mise à niveau fluide.
Cette réponse est maintenant obsolète en ce qui concerne Rails 4. Le magasin de sessions d'enregistrement actif a été déconseillé et supprimé de Rails, donc les générateurs suivants ne travail plus long:
rake db:sessions:create
Rails generate session_migration
Cela a été souligné dans cette réponse . La raison pour laquelle le magasin de sessions d'enregistrement actif a été déconseillé est que les lectures/écritures dans la base de données ne sont pas bien adaptées lorsque vous avez un grand nombre d'utilisateurs accédant à votre application, comme indiqué dans ce billet de blog :
... un problème majeur avec le magasin de sessions Active Record est qu'il n'est pas évolutif. Cela met une charge inutile sur votre base de données. Une fois que votre application reçoit un trafic important, la table de base de données des sessions est continuellement bombardée d'opérations de lecture/écriture.
Depuis Rails 4, le magasin de sessions Active Record a été supprimé du framework principal et est désormais obsolète.
Si vous souhaitez toujours utiliser le magasin de sessions d'enregistrement actif, il est toujours disponible en tant que gemme .
Pour les meilleures pratiques actuelles pour Ruby on Rails sessions, je vous conseille de consulter les dernières versions des Ruby on Rails Guide de sécurité .
Je ne crois pas que quoi que ce soit ait changé dans la façon dont quiconque sur n'importe quelle plate-forme devrait gérer les sessions basées sur les cookies. Soyez sceptique vis-à-vis de tout ce qui dépasse le contrôle du serveur (cookies, messages de formulaire, etc.). C'est un principe général du développement web.
En ce qui concerne le cryptage, je ne sais pas si quelque chose a changé sur ce front.
Quelque chose à garder à l'esprit avec un magasin de cookies est la limite de la quantité de données, et le piège que ces données seront envoyées sur le fil dans chaque demande, où en tant que magasin de base de données ne transfère que l'identifiant et les données vivent sur le serveur .
FWIW, Rails 3.1 suggère d'exécuter
Rails generate session_migration
Cependant, cela génère exactement la même migration que
rake db:sessions:create
Les valeurs par défaut Rails me semblent assez bonnes - Le CookieStore est rapide et devrait couvrir la majorité des cas d'utilisation. Bien sûr, vous êtes limité à 4 Ko et vos données seront visibles pour l'utilisateur, mais le Rails consiste à n'utiliser la session que pour des choses comme les ID entiers et les valeurs de chaîne de base - Si vous essayez de stocker des objets ou des informations hautement confidentielles dans la session, vous vous trompez probablement.