Question

Je développe un système de connexion basé sur PHP. Chaque utilisateur possède un identifiant (un numéro) et un mot de passe, stockés sous forme de hachage salé.

Je suis en mesure de déterminer si une connexion a réussi ou non, mais je dois maintenant stocker ces informations quelque part (pour que l'utilisateur ne soit pas déconnecté en permanence).

Dans le passé, je jouais avec les variables $ _SESSION. Cependant, ceux-ci semblent être supprimés lorsque l'utilisateur quitte le navigateur, ce qui n'est pas souhaité. En outre, je ne peux pas "supposer" que l'utilisateur n'essaiera pas de tromper le système, il doit donc être sûr.

Alors, voici mes questions:

  1. Devrais-je utiliser $ _SESSION ou $ _Cookie ? Quels sont les principaux avantages de chacune de ces approches?
  2. Comment implémenter une case à cocher "Mémoriser mes informations"?
  3. Quelles informations doivent être stockées dans la variable session / cookie?

Notez qu'aucun problème de sécurité de base de données n'est pris en compte dans cette question particulière.

En ce qui concerne le numéro 3, ce que je veux dire exactement est:

  • Dois-je stocker l'ID et le mot de passe haché de l'utilisateur dans le cookie / la session, ou
  • Devrais-je stocker l'ID et le mot de passe non haché de l'utilisateur dans le cookie / la session ou
  • Devrais-je stocker un "SessionID"? et le mot de passe (haché ou non haché?) ou
  • Devrais-je enregistrer un "SessionID", le "ID"? et le mot de passe (encore une fois, haché ou non)?

Je souhaite que mon site Web reste aussi sûr, efficace et convivial que possible. Si une approche basée sur SessionID est adoptée, j'aimerais également avoir quelques explications sur la manière de la stocker dans la base de données.

Merci d'avance

EDIT: Les réponses combinées d'Eran et de Brian semblent être ce dont j'ai besoin. Malheureusement, je ne peux en marquer qu’un comme accepté. Je vais essayer d'aller de l'avant et de mettre en œuvre pour voir lequel est le plus utile.

Était-ce utile?

La solution

Je souhaite réitérer le point d'Eran ne jamais stocker le mot de passe des utilisateurs ou même un hachage du mot de passe dans les données de session ou de cookie.

En général, j'ai implémenté la fonctionnalité Mémoriser mes informations dans les applications Web utilisant des cookies. Un bon point de départ pour obtenir des informations sur la création d’une solution "sécurisée". Le système de connexion persistante est ce article de blog sur le bocal à poissons . Une réponse détaillée est déjà couverte dans une autre réponse au débordement de la pile .

Si vous devez vous assurer que la connexion est sécurisée, vous devez utiliser https. En effet, les cookies ou les sessions peuvent être volés s’ils ne sont pas cryptés.

Une autre bonne pratique à suivre est le système de connexion à 2 niveaux. Vous pouvez le voir sur des sites comme Amazon, où vous pouvez ajouter des éléments à votre panier sans vous connecter, mais si vous souhaitez passer à la caisse ou modifier votre compte, vous devez entrer votre mot de passe à nouveau.

Autres conseils

Pour les informations sensibles (résultats d'authentification, par exemple), utilisez uniquement les sessions. Les sessions sont stockées côté serveur et sont beaucoup moins susceptibles d'être compromises.

En ce qui concerne la durée de vie d'une session, la valeur par défaut est celle de la session du navigateur, mais vous pouvez le contrôler. Plusieurs paramètres ont une incidence sur cela:

session.gc_maxlifetime: contrôle efficacement la durée de vie de la session.

session.gc_probability et session.gc_divisor déterminent ensemble la fréquence de la récupération de place de la session.

Et last - session.cookie_lifetime contrôle la durée de vie du cookie de session (le cookie qui contient l'identifiant de session afin qu'il ne soit pas nécessaire de le transférer via l'URL). Il doit correspondre à la valeur de session.gc_maxlifetime.

De même, ne stockez jamais les mots de passe dans des sessions ou des cookies (même au format haché). Juste les résultats de l'authentification.

Stockez l'ID dans $ _SESSION mais ne stockez pas le mot de passe haché ou non. Une fois l'utilisateur connecté et l'ID enregistré dans $ _SESSION, vous n'avez plus besoin du mot de passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top