OVH Cloud OVH Cloud

Procedure Mot de passe oublie

18 réponses
Avatar
Bilango
Bonjour à tous,


Dans le cadre de la refonte d'un site en PHP/mysql, je dois ajouter la
fonctionnalité Mot de passe oublié sur l'accès à un espace membre.

Je m'interrogais sur les moyens de mettre en oeuvre cette procédure et
même si cette question n'est pas purement technique PHP, je fait appel à
vos expériences.

Le sgbd contient le login, et le hashage sha1 du mot de passe (oui, oui,
je sais que John G. n'est pas pour, mais c'est déjà stocké comme ca...).

Donc ma première idée est de mettre en place la page classique contenant
un champ entrez votre email et on vous renvoie un nouveau mot de passe.

Au moment de la validation, je pensai changer le mot de passe dans la
base en utilisant un généré aléatoirement, et envoyer ce dernier à
l'adresse email.

Or, comme les adresses email figurent aussi dans des messages sur le
site, j'ai peur qu'un petit malin ne s'amuse à changer les mots de passe
des autres. Bien sur, les membres recevront leur nouveau mot de passe,
mais ils risquent de se lasser de les modifier si cela se reproduit.

D'autres part, je n'ai pas d'information dans la base concernant le
compte qui ne soit pas visible sur le site (genre, quel est le nom de
votre chien) qui permettrait d'identifier à coup sur le demandeur. Et
comme, il y a déjà plusieurs milliers de compte déjà créé, je ne peux
ajouter cette fonction.

Avez-vous des idées ou des liens pour résoudre ce problème?

Merci

--
Bilango

8 réponses

1 2
Avatar
John GALLET
Voila ce que peut faire le webmaster :)
L'une des raisons pour lesquelles je ne participe presque plus à ce

forum et que je me contente de modérer les articles, c'est que j'en ai
marre de répéter toujours les mêmes choses.

Il est "évident" (?) que bannir l'IP sera au mieux inutile, et au pire
une catastrophe.

1) tout le monde le sait (?) REMOTE_ADDR n'est pas fiable.

2) tout le monde le sait (?) il n'est d'ailleurs même pas possible de
connaître l'adresse IP source *avec certitude*.

3) en admettant que ce soit la bonne, il y a des adresses IP dynamiques.
Donc non seulement ça n'empêchera pas R00t-P4t4t0r de recommencer avec
une autre IP dans 10 minutes, mais en plus avec un peu de malchance, un
pauvre gars se pointera le lendemain avec l'IP bannie et l'aura dans le...

4) il est de notoriété publique (?) que les proxys ça existe. Pour ne
parler que de ceux-ci, tous les abonnés AOL tournent sur les mêmes
adresses IP. Même si oui je sais "AOL sucks", ça fait quand même bannir
une tétrachiée d'utilisateurs légitimes.

5) le temps que l'utilisateur légitime dont on demande indûment le
changement de passe lise son mail, se décide à l'envoyer au webmaster,
que le webmaster le lise, si j'ai envie de f... la m... je vais scripter
la demande de changement de mot de passe et toute la base de données
sera déjà pourrie.

Bref, halte aux conneries.

JG

Avatar
Bilango

Donc tu ne touches à rien dans la table qui stocke les mots de passe, tu
envoies un jeton d'autorisation sur un email réputé fiable, et tu
attends. Si ce jeton est demandé pendant sa période de validité, tu fais
l'update avec le nouveau mot de passe fournit, sinon... tu ne fais rien
d'autre que la purge du jeton.



C'est très clair, merci.


C'est ça qui me broute profondément avec ce mécanisme des sessions PHP4,
c'est que les développeurs ne savent plus comment ça marche. Le
paragraphe que j'ai écrit au dessus, c'est exactement la description
d'une gestion de sessions "manuelle" telle qu'on la faisait déjà en PHP3
(et telle que je la fais encore d'ailleurs). Cf le tutoriel que je
diffuse sur saphirtech.com pour un détaillage complet.



Effectivement, la réponse était au chapitre 10 du Cours de web
dynamique, et j'ignorai le fonctionnement précis des sessions.

Je vais relire tes documents, et te remercie sincérement de ces
merveilleuses contributions.

--
Bilango

Avatar
Pozzo
John GALLET wrote:
C'est ça qui me broute profondément avec ce mécanisme des sessions PHP4,
c'est que les développeurs ne savent plus comment ça marche.


Je parie que tu n'aimes pas non plus le garbage collector de Java ;-)

--
Pozzo - Et dire qu'on faisait des cgi en C il n'y a pas si longtemps...

Avatar
John GALLET
C'est ça qui me broute profondément avec ce mécanisme des sessions PHP4,
c'est que les développeurs ne savent plus comment ça marche.


Je parie que tu n'aimes pas non plus le garbage collector de Java ;-)


C'est pas difficile à parier. J'ai déjà raconté N fois l'anecdote des
serveurs web de production d'un grand acteur de la e-finance qui
restaient régulièrement totalement scotchés pendant 1,5 à 2 secondes de
manière aléatoire, et que Sun a mis 2 jours à diagnostiquer (tout à
faire correctement) comme le déclenchement du garbage collector java.
C'est pas en C ou en C++ qu'on aurait eut le problème.

Pozzo - Et dire qu'on faisait des cgi en C il n'y a pas si longtemps...


Ca tombe bien, PHP est du CGI en C :-)

a++;
JG


Avatar
Pozzo
John GALLET wrote:
Bref, halte aux conneries.


Ca me fait penser à la réponse "Vaste programme..." faite par de Gaulle
à son aide de camp qui lui aurait dit "Mort aux cons !"

--
Pozzo - Hors sujet

Avatar
Michel Billaud
John GALLET writes:

Re,


Envoi d'un lien valide pendant X minutes (oh, une session !) permettant
d'écraser le mot de passe actuel.


Effectivement, je vais certainement opter pour cette idée. Sur le
principe de la session par contre, je me demande si le risque n'est pas
la fermeture du navigateur par l'internaute (ou alors je n'ai pas
compris la méthode).


Une session n'est pas nécessairement une donnée conservée dans un
cookie... Le principe de la session, c'est de comparer une donnée reçue
avec une donnée conservée côté serveur qui est associée à des droits
d'accès aux ressoruces serveur. Donc si tu envoies un lien html dans le
mail du style change_pass.php?authid345677890ABCDefgh, il suffit de
vérifier que cet ID est présent dans, par exemple, une table de bases de
données (ou même un fichier texte vu le peu d'accès concurrents, à la
limite).


J'ai l'impression qu'on peut même se dispenser de stocker quoi que ce soit dans la base,
il suffit que l'authid soit en fait un jeton contenant les informations nécessaires
(identifiant utilisateur concerné, date limite de validité du jeton)
crypté par le serveur.

MB

--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)



Avatar
John GALLET
J'ai l'impression qu'on peut même se dispenser de stocker quoi que ce soit dans la base,
il suffit que l'authid soit en fait un jeton contenant les informations nécessaires
(identifiant utilisateur concerné, date limite de validité du jeton)
crypté par le serveur.


Tout dépend du niveau de secret associé aux données utilisées pour ce
checksum, surtout sur du code open source(1). La date de validité est
assez facile à deviner ou pifométriser avec suffisement de précision
pour limiter les combinaisons et toutes les essayer dans le temps
imparti. Si par "identifiant" on entend "login", c'est discutable. Si
identifiant=login­resse email, on oublie. Si identifiant numérique en
autoincrement on oublie aussi. Bref, oui sur sur le principe dès lors
qu'on ne peut pas tout simplement faire du bruteforce parce qu'on limite
les combinaisons possibles.

JG

Avatar
Jean-Francois Ortolo
John GALLET wrote:
Re,

Donc tu ne touches à rien dans la table qui stocke les mots de passe, tu
envoies un jeton d'autorisation sur un email réputé fiable, et tu
attends. Si ce jeton est demandé pendant sa période de validité, tu fais
l'update avec le nouveau mot de passe fournit, sinon... tu ne fais rien
d'autre que la purge du jeton.




Bonjour Monsieur

Ok pour cette procédure d'update de password.

Juste une question: Celà vaut-il la peine,
de faire une vérification de la complexité du password,
au moment de sa saisie par le demandeur ?

Genre: Au moins un ou deux chiffres,
et une ou deux lettres minuscules
et une ou deux lettres majuscules.

Juste pour savoir ce que vous préconisez
en ce qui concerne ce topic.

Merci beaucoup pour vos apports
aux bonnes pratiques de programmation web.

Bien à vous.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques
et des Historiques Graphiques sur les Courses de Chevaux:
http://www.ortolojf-courses.com

1 2