11
votes

Que devriez-vous stocker dans un cookie pour un système de connexion?

Quelle est la meilleure chose à stocker dans un cookie pour garder un état connecté persistant?

J'ai vu de nombreux sites Web (et des tutoriels débutants!) Il suffit de stocker quelque chose comme ValidUser = 1 dans un cookie. Clairement, je pourrais spoof et le site Web penserait que j'étais un utilisateur valide.

Si le nom d'utilisateur est stocké dans le cookie, je pouvais masquerade comme utilisateur en envoyant un cookie avec son nom d'utilisateur dans ma demande.

Donc, si vous stockez le nom d'utilisateur et de la cookie, je dois connaître le nom d'utilisateur et le mot de passe pour vous connecter. Effectivement l'utilisateur est connecté automatiquement - il est comme avoir le mot de passe enregistré par son navigateur. Au lieu de devoir taper les informations d'identification dans les cases lui-même à chaque fois, le navigateur les envoie automatiquement à chaque demande de page.

Mais est-ce encore une mauvaise idée? Stocker un mot de passe texte clair n'est pas une idée brillante, mais c'est ainsi que cela serait envoyé dans les données de poste lors de la connexion. Et en outre, il pourrait être stocké haché. Mais je ne me sens toujours pas à l'aise avec ça.

Les cookies ne doivent peut-être pas être utilisés pour stocker quoi que ce soit à l'exception d'un identifiant de session et que les données utilisateur sont stockées sur le serveur lui-même. C'est peut-être un lieu plus sûr pour cela, en présumant que le serveur n'est pas partagé.

En regardant un logiciel open source tel que le logiciel de forum, ils utilisent un système plus compliqué, mais je ne pouvais pas comprendre exactement ce qu'il faisait d'écrémer le code.

Quelle est la "meilleure pratique" standard?


2 commentaires

Alors, c'est aussi simple que de stocker un identifiant utilisateur dans la session alors? C'est sûr, et pas besoin de stocker des informations supplémentaires sur une connexion particulière dans la base de données? (E.G. IP), et pour changer toutes les sessions / données chaque fois qu'ils reviennent, comme je l'ai vu ces grands scripts?


Vous devez réutiliser un cadre d'authentification existant chaque fois que possible, car, vraiment complexe. Par exemple, jetez un coup d'oeil à github.com/delight-im/php-auth


4 Réponses :


5
votes

2 commentaires

Le deuxième lien est maintenant cassé.


Les réponses contenant uniquement des liens ne sont pas de bonnes réponses. Cette réponse doit être modifiée pour inclure un résumé des articles liés. (Oui, je sais que c'est une très vieille réponse déjà. Cependant, le commentaire d'un lien brisé illustre parfaitement la nécessité de résumer les liens.)



3
votes

Les meilleures pratiques seraient d'utiliser un Session au lieu d'un Cookie pour utilisation des données. Les cookies sont utilisés pour stocker des informations génériques non des informations spécifiques sur un utilisateur, c'est ce que les sessions sont utilisées.


0 commentaires

0
votes

La meilleure pratique consiste à stocker un identifiant de session généré au hasard. La session stocke ensuite l'ID utilisateur ou tout ce dont vous avez besoin pour stocker. En PHP, la méthode session_start () génère automatiquement l'ID de session et un cookie nommé phpsessid. Vous n'avez donc besoin de vous inquiéter que de stocker des données dans le tableau $ _session, pas dans le cookie.


0 commentaires

0
votes

La seule chose qui devrait être dans un cookie est la sessionID générée par PHP (et ceci est effectué automatiquement lorsque vous utilisez des sessions). Vous ne devez pas stocker quoi que ce soit dans le cookie, sauf peut-être un nom d'utilisateur mémorisé à des fins d'une case à cocher "Souvenez-vous de moi".


0 commentaires