Question

Je souhaite que mon site Web dispose d'une case à cocher sur laquelle les utilisateurs peuvent cliquer pour ne pas devoir se connecter à chaque visite sur mon site Web. Je sais que je devrai stocker un cookie sur leur ordinateur pour mettre cela en œuvre, mais que devrait contenir ce cookie?

De même, y a-t-il des erreurs communes à éviter pour empêcher ce cookie de présenter une vulnérabilité en matière de sécurité, ce qui pourrait être évité tout en offrant la fonctionnalité "Mémoriser mes informations"?

Était-ce utile?

La solution

Meilleure pratique en matière de cookies de connexion persistants améliorés

Vous pouvez utiliser cette stratégie décrite ici en tant que bonne pratique (2006) ou une stratégie mise à jour décrite ici (2015):

  1. Lorsque l'utilisateur se connecte avec l'option Mémoriser mes informations, un cookie de connexion est émis en plus du cookie de gestion de session standard.
  2. Le cookie de connexion contient un identifiant de série et un jeton . La série et le jeton sont des nombres aléatoires non déterminables situés dans un espace suffisamment grand. Les deux sont stockés ensemble dans une table de base de données, le jeton est haché (sha256 suffit).
  3. Lorsqu'un utilisateur non connecté se rend sur le site et présente un cookie de connexion, l'identifiant de la série est recherché dans la base de données .
    1. Si l'identificateur de série est présent et que le hachage du jeton correspond au hachage de cet identifiant de série, l'utilisateur est considéré comme authentifié . Un nouveau jeton est généré, un nouveau hachage pour le jeton est stocké sur l'ancien enregistrement et un nouveau cookie de connexion est envoyé à l'utilisateur (vous pouvez réutiliser l'identifiant de la série ).
    2. Si la série est présente mais que le jeton ne correspond pas, un vol est supposé. L’utilisateur reçoit un avertissement fort et toutes ses sessions mémorisées sont supprimées.
    3. Si le nom d'utilisateur et la série ne sont pas présents, le cookie de connexion est ignoré .

Cette approche offre une défense en profondeur. Si une personne parvient à divulguer la table de la base de données, cela n'ouvre pas la porte à un attaquant pour lui permettre d'emprunter l'identité de ses utilisateurs.

Autres conseils

Je voudrais stocker un identifiant d'utilisateur et un jeton. Lorsque l'utilisateur revient sur le site, comparez ces deux informations avec un élément persistant tel qu'une entrée de base de données.

En ce qui concerne la sécurité, il ne faut rien ajouter qui permettrait à quelqu'un de modifier le cookie pour obtenir des avantages supplémentaires. Par exemple, ne stockez pas leurs groupes d'utilisateurs ou leur mot de passe. Tout ce qui peut être modifié pour contourner votre sécurité ne doit pas être enregistré dans le cookie.

Stockez leur UserId et un RememberMeToken. Quand ils se connectent avec Remember Me Check, générez un nouveau RememberMeToken (qui invalide toutes les autres machines marquées et se souvient de moi).

Quand ils reviendront, cherchez-les à l'aide du jeton Remember me et assurez-vous que l'ID utilisateur correspond.

Enquête sur des sessions persistantes moi-même J'ai constaté que cela ne valait tout simplement pas le risque de sécurité. Utilisez-le si vous devez absolument, mais vous ne devriez envisager une telle session que faiblement authentifiée et forcer un nouvel identifiant pour tout ce qui pourrait avoir de la valeur pour un attaquant.

La raison en est bien sûr que vos cookies contenant votre session persistante sont si facilement volés.

4 façons de voler vos cookies (dans un commentaire de Jens Roland sur la page < code> @splattne a basé sa réponse sur):

  1. En l'interceptant sur une ligne non sécurisée (détection de paquets / détournement de session)
  2. En accédant directement au navigateur de l'utilisateur (via un logiciel malveillant ou un accès physique à la boîte)
  3. En le lisant depuis la base de données du serveur (probablement une injection SQL, mais cela pourrait être n'importe quoi)
  4. Par un hack XSS (ou un exploit similaire côté client)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top