Plus précisément, j'ai écrit une application Rails dans laquelle j'utilise le magasin de session par défaut (dans Rails 2.3.5) CookieStore
et j'ai repéré un problème étrange en développement. Moi-même et quelques autres utilisions le site depuis quelques semaines et nous avions chacun un login basé sur un nom d'utilisateur et un mot de passe (chaque utilisateur s'est enregistré et j'ai stocké les données (salées et hachées) dans la base de données). Je stockais l'ID utilisateur dans l'objet Rails session
(et, par conséquent, dans le cookie qui est passé entre le navigateur et le serveur).Comment empêcher les utilisateurs de Rails de s'authentifier accidentellement en tant que mauvais utilisateur?
Un point important ici: puisqu'il s'agit d'un site intranet, je mets les cookies à jour jusqu'à 2 semaines pour éviter que les utilisateurs se connectent en permanence.
Aujourd'hui, je réinitialise la base de données, en effaçant tous les enregistrements utilisateur (et toutes les autres données, intentionnellement). Quelques utilisateurs ont commencé à s'enregistrer à nouveau, puis un utilisateur a constaté que la première fois qu'ils se sont rendus sur le site depuis la réinitialisation, ils étaient automatiquement connectés en tant qu'utilisateur différent!
Je pense que je peux voir pourquoi cela est arrivé: l'ID d'utilisateur passé du navigateur de cet utilisateur au serveur correspond maintenant à un autre enregistrement d'utilisateur dans ma base de données. Ma première pensée était "oh mon dieu, je ne m'attendais pas à ça!" mais plus j'y pensais, plus je réalisais que c'était probablement un comportement attendu.
Je réalise que je peux changer mon application Rails à l'utilisateur ActiveRecordStore
mais avant cela, je voulais m'assurer de comprendre ce qui se passait ici. Plus précisément, est-ce que la combinaison des sessions CookieStore
et du fait que les sessions restent actives pendant un certain temps crée vraiment un tel trou de sécurité? Ou est-ce que je manque quelque chose? Est-ce que le session_id
devrait fournir un peu plus de sécurité ici?
Cela semble plus simple et je l'utiliserai pour toutes les applications Rails basées sur le cookie que j'écrirai dans le futur. – Ben