2009-03-03 6 views
3

Je crée un site Web qui permet aux utilisateurs de créer des comptes et d'accéder au contenu du site. Je ne veux pas que les utilisateurs se connectent chaque fois qu'ils visitent le site, donc je prévois de stocker le nom d'utilisateur et mot de passe dans un cookie - cependant, j'ai entendu dire que c'est une mauvaise pratique, même si le mot de passe est haché le cookie. Quelles sont les «meilleures pratiques» dois-je suivre pour me rappeler en toute sécurité des informations d'identification d'un utilisateur entre deux visites sur mon site Web?Stocker les informations d'identification en toute sécurité entre les visites du site Web

Répondre

2

Ne le faites jamais. Lancer autour des mots de passe à l'air libre.

méthode la plus sûre:

Stocker le nom d'utilisateur dans une base de données, dans la même rangée, une valeur de sel généré de façon aléatoire, dans la même rangée une somme de contrôle de hachage du mot de passe comprenant le sel. Utilisez une autre table pour les sessions qui référencent la table avec les informations d'identification de l'utilisateur. Vous pouvez insérer dans la table des sessions lorsque l'utilisateur se connecte une date à laquelle vous souhaitez que la session expire (par exemple, après 15 jours). Stockez l'identifiant de session dans un cookie.

La prochaine fois que l'utilisateur se connecte, vous obtenez le mot de passe, ajoutez-y le sel pour l'utilisateur, gâtez le hachage, comparez-le à celui que vous avez. S'ils correspondent, ouvrez une session en insérant une ligne dans la table des sessions et en envoyant l'identifiant de la session dans un cookie. Vous pouvez vérifier si l'utilisateur s'est connecté et quel utilisateur il est par ce cookie.

Edit:

Cette méthode est le plus populaire utilisé sur la plupart des sites. Il y a un bon équilibre entre sécurité et pratique.

Vous n'utilisez pas simplement une valeur autoincrément pour l'ID de session. Vous le faites en utilisant une somme de contrôle compliquée qui est difficile à répéter.Par exemple concaténer le nom d'utilisateur, l'horodatage, le sel, un autre sel aléatoire, et en faire une somme de contrôle md5 ou sha. Pour implémenter une fonctionnalité impliquant des informations d'identification d'utilisateur dans un site Web/service, la plupart des échanges de données liés aux informations d'identification entre le client et le serveur doivent être effectués. Cela expose les données à l'homme dans le milieu attacs etc. En outre, les cookies sont stockés dans le disque dur de l'utilisateur. Aucune méthode ne peut être sûre à 100%.

Si vous voulez une sécurité supplémentaire, vous pouvez faire passer votre site https. Cela empêchera les gens de voler des cookies et des mots de passe en utilisant l'homme dans les attaques du milieu.

Note:

impliquant les adresses IP dans le mélange n'est pas vraiment une bonne idée. Le plus souvent, plusieurs clients proviennent de la même adresse IP sur des NAT, etc.

+0

Si je stocke l'ID de session dans un cookie, il est toujours possible pour quelqu'un de voler le cookie, de manipuler ses propres cookies, et d'assumer l'identité d'un de mes utilisateurs. Corrigez-moi si j'ai mal compris. – Juliet

+0

Vous avez raison. Si vous voulez une sécurité supplémentaire, vous pouvez faire passer votre site sur https. Cela empêchera les gens de voler des cookies et des mots de passe en utilisant l'homme dans les attaques du milieu. – Vasil

+0

Eh bien, il y a une opportunité potentielle pour une attaque MITM, étant donné que personne n'examine les certificats. –

2

Vous ne devriez pas avoir besoin de stocker le mot de passe, juste un identifiant pour l'utilisateur que votre application peut interpréter pour être eux.

choses que vous devez être au courant:

  • Si le cookie est copié, sera un autre utilisateur de pouvoir prétendre être que l'utilisateur
  • Un utilisateur ne doit pas être en mesure de construire un cookie les authentifierait comme un autre utilisateur

Une solution possible pour traiter ces problèmes serait de créer une clé unique pour chaque utilisateur qui sera modifiée lors de la prochaine utilisation de l'application.

Vous ne serez probablement jamais capable de vous souvenir d'un utilisateur en toute sécurité, donc ceci ne devrait être utilisé qu'en l'absence de données sensibles.

+0

-1, vous pouvez utiliser un certificat côté client pour identifier de façon sécurisée un utilisateur authentifié. –

+0

sauf si le certificat est compromis .... – cjk

0

Le stockage d'un hachage du nom d'utilisateur dans un cookie pourrait fournir cette fonctionnalité "remember me". Toutefois, pour les zones sensibles du système, vous devez savoir qu'un utilisateur a entré le système sur des informations d'identification mises en cache afin que vous puissiez proposer un nom d'utilisateur/mot de passe avant de les laisser causer de réels dommages. Cela pourrait être considéré comme un drapeau basé sur une session.

1

Les mots de passe sous quelque forme que ce soit ne doivent pas être stockés dans des cookies. Les cookies peuvent facilement être volés.

Certains navigateurs prennent déjà en charge la sauvegarde des mots de passe. Pourquoi ne pas laisser l'utilisateur l'utiliser à la place?

Questions connexes