Est-il la meilleure pratique pour appeler reset_session lorsqu'un utilisateur avec succès des signes dans et l'appeler à nouveau lorsqu'un utilisateur se déconnecte? Existe-il des effets secondaires ou problèmes à le faire?
OriginalL'auteur CalebHC | 2011-01-27
Qui va vraiment dépendre de la façon dont vous stockez des choses dans la session et comment vous souhaitez que le sécurité pour fonctionner.
Réinitialiser la session d'abandon de tout à partir de la session de l'utilisateur, donc si ils hop de retour dans l'écran de connexion et connectez-vous, mais encore (par exemple) un panier d'achats stockés de leur session, vous aurez clair que ce qui peut être indésirable.
Si vous n'êtes pas le stockage de toutes les données que vous sentez les utilisateurs pourraient vouloir se tenir, je ne connais pas la raison de compensation de la session avant le traitement d'une tentative de connexion serait mal du tout, un signe outs, je le recommande.
OriginalL'auteur Mblake
La Ruby on Rails Guide de Sécurité recommande la réinitialisation de l'id de session en cas de réussite de l'authentification pour protéger contre fixation de session vulnérabilités. Essentiellement, la fixation de session implique un attaquant de réglage de l'identifiant de session (ou une autre méthode de mesure de savoir ce que l'id est quand vous frappez la page de connexion), et, lors de votre authentification réussie, l'attaquant définit un cookie pour leur propre navigateur à l'aide de votre id de session et sont par la suite authentifié comme vous. La réinitialisation de l'id de session sur la réussite de l'authentification complètement atténue une telle vulnérabilité. Un exemple de code dans votre créer l'action pourrait ressembler à:
Notez qu'il est important pour dupliquer la session avant de le réinitialiser si il y a toutes les données que vous souhaitez conserver.
Aussi loin que l'appel à la reset_session sur déconnexion, oui, c'est aussi des bonnes pratiques.
session.replace
ne fonctionne plus. Vous pouvez, toutefois, obtenir les valeurs anciennes avecold_values = session.to_hash
et de les restaurer à la nouvelle session avecsession.update(old_values)
.N'est-ce pas copier sur la
session_id
? Est-ce intentionnel?Non, vous avez raison. Je ne suis pas sûr de ce mal qu'il fait. Nous allons changer
old_values = session.to_hash
etsession.update old_values.except('session_id')
.OriginalL'auteur rbhitchcock
Je considère qu'il est de bonne pratique pour réinitialiser la session lors de la connexion de l'utilisateur. De cette façon, des individus malveillants peuvent pas détecter leur cookie de session avant la connexion du client sont cryptées et toujours l'utiliser après ils utilisent le signe de la forme sur https. Essayez:
De cette façon, session obtient les nouvelles valeurs générées par reset_session, mais toutes les autres variables de session restent intacts.
OriginalL'auteur Jeff Peterson
Un grand nombre de réponses ici n'ont pas bien vieilli en raison de l'API Rails de changer donc je vais juste laisser un ici qui fonctionne comme des Rails 5.0 au moins.
Comme d'autres l'ont noté les Rails du Guide de Sécurité de recommande appel
reset_session
sur login (connexion) pour éviter la fixation de session attaques.Vous pourriez voulez que votre session effacé lors de la connexion, mais si vous voulez juste changer l'id de session et garder tout le reste (c'est à dire pas d'effets secondaires), vous pouvez le faire comme ceci:
OriginalL'auteur Ritchie