2010-01-08 13 views
0

En bref, je développe un moteur de rapport interne. Il est entièrement basé sur le web (utilisant PHP et diverses techniques AJAX) et interprète les données stockées dans une base de données MySQL par notre logiciel de production. Il fonctionne sur un serveur Ubuntu 8.04 et tous les employés ont un compte utilisateur Linux sur cette machine. J'ai mis en place un système de connexion en utilisant pam_auth qui force un utilisateur à se connecter avec son compte d'utilisateur linux et détermine s'il appartient ou non au groupe approprié pour accéder à des rapports particuliers.PHP pam_auth et les cookies

Cette partie fonctionne très bien, mon problème ici est d'ajouter une fonction "se souvenir de moi" en utilisant des cookies. Je voudrais que les utilisateurs aient un cookie de 30 jours juste pour leur épargner du temps et l'aggravation d'avoir à se connecter chaque fois que leur session expire. J'ai écrit la partie «se souvenir de moi» du code et il stocke le cookie très bien. Je stocke seulement leur nom d'utilisateur et un hachage md5 de leur mot de passe. Le problème vient ici quand il est temps de les ré-authentifier. Normalement, je ferais simplement cela en comparant le nom d'utilisateur stocké avec un mot de passe de cet utilisateur de la base de données. Ce qui complique les choses, c'est que je n'ai pas directement accès aux noms d'utilisateur et aux mots de passe. Ils sont tous stockés dans/etc/passwd et/etc/shadow et les connexions sont gérées par le module PAM. pam_auth attend un nom d'utilisateur en texte brut et un mot de passe en texte brut.

Il semble que mes seules alternatives sont soit de stocker le mot de passe en texte brut, soit avec un cryptage réversible, mais je n'aime pas particulièrement ces idées.

Y a-t-il de meilleures solutions ici?

Répondre

0

Une autre option que vous pouvez utiliser est la gestion de session intégrée de PHP. Ensuite, le seul cookie qui doit être défini sur l'ordinateur de l'utilisateur est l'ID de session que PHP fera automatiquement pour vous.

Vous pouvez définir la durée de la session PHP sur au moins 30 jours en modifiant ces deux paramètres ini: 'session.cookie_lifetime' et 'session.gc_maxlifetime'. Ensuite, une fois qu'un utilisateur s'est connecté, vous pouvez stocker son nom d'utilisateur et lorsqu'il s'est connecté dans le tableau super global $ _SESSION après avoir appelé session_start(). Quand un utilisateur revient, vous pouvez vérifier les valeurs dans le tableau $ _SESSION pour voir s'il s'est connecté et s'il y a moins de 30 jours.

Maintenant, si vous avez encore besoin de l'authentification PAM pour d'autres raisons, vous devez stocker leur mot de passe dans la variable de session soit en texte clair, soit de manière réversible cryptée. Bien que ce soit non-idéal, il est plus sûr que comme un cookie dans le navigateur de l'utilisateur. Pour plus d'informations, regardez le PHP Session - Manual.

+0

Existe-t-il des problèmes pouvant survenir en définissant la durée de vie de la session sur 2592000 (30 jours)? – DWilliams

+0

Je n'en connais aucune et je ne pense pas que la documentation en note, mais je n'ai jamais essayé d'avoir une session PHP aussi longue. – jlamp