Bonjour à tous,

Bien qu'ayant prit la peine de parcourir le topic de long en large pour chercher réponse à ma question, je ne trouve pas l'ombre d'une ligne qui pourrait m'aider.
Si vous avez le lien d'un sujet qui aborde ce problème (ne tapez pas!), je suis bien évidemment preneur.

J'explique mon souci.

Sur le site d'un client, nous avons un formulaire qui permet de s'inscrire (php). Nous envoyons un mail avec un lien de confirmation permettant de valider son compte (via la classe PHPMailer).

Dans ce mail, derrière le "cliquez ici" se cache le mail du nouvel inscrit + son pwd hashé.

Ce lien fonctionne très bien sur les clients de messagerie standard, les webmails standards également SAUF Hotmail...

Quand je survole ce lien, FF m'indique bien un email du type "adresse@mail.com/pwd", sauf que lorsque je clique dessus, le @ se tranforme en %40 et bloque la validation de l'inscription.

J'ai testé des str_replace/urlencode/urldecode/rawurlencode/etc... Rien y fait Smiley bawling

L'un de vous aurait-il une piste à me lancer ?

(en dehors de bannir les gens qui utilise Hotmail évidemment ... )


Merci infiniment !
Modifié par Lups (20 Jan 2012 - 13:42)
Lups a écrit :
Dans ce mail, derrière le "cliquez ici" se cache le mail du nouvel inscrit + son pwd hashé.

Le hash du password dans le mail? C'est pas une grosse faille de sécurité ça?
Il me semble que d'habitude on envoie plutôt un lien avec un token (sans rapport avec le mot de passe) permettant de valider la création du compte.

Pour ton problème avec Hotmail, il faudrait vérifier:
1. Ce que tu envoies effectivement comme email (source).
2. Le code HTML restitué par Hotmail, qui peut effectivement être différent.

Si Hotmail applique du percent-encoding sur le contenu des URL dans un mail HTML, c'est plutôt logique (pour info ou rappel, %40 c'est la transcription en percent-encoding du caractère @). Par contre quand tu récupères la valeur en PHP avec $_GET le contenu devrait être décodé et l'utilisation de urldecode ne devrait pas être nécessaire. Tu sais quelle chaine de caractères tu récupères en PHP? Si tu récupères "%40", c'est peut-être que Hotmail a reçu "%40" dans ton mail et a encodé le caractère "%" en "%25", ce qui donne au final "%2540".

Dans tous les cas utiliser un token temporaire plutôt qu'un couple email/hash de mot de passe résoudrait ton problème tout en évitant un problème de sécurité.
Bonjour Florent,

Merci pour ton aide.

Je rectifie ma bêtise : c'est bien un token qui est généré plutôt que le hash du pwd ... Ahem >_<

Pour ce qui est de tes questions :
1. la source de l'email est du html (si j'ai compris la question Smiley confused )
2. en testant l'url en clair, l'arobase s'affiche bien dans le corps du mail, c'est au niveau de l'envoi vers une nouvelle fenêtre que ça foire (où le @ se transforme effectivement en %40).

Pour la génération du token temporaire englobant le tout ... Ça dépasse de loin mes compétences sur le sujet Smiley smile
(je remonte sur un site où plusieurs dév ont pu se succéder, et comme le php n'est pas mon ami ... Je vous laisse imaginer la suite).

Encore merci pour ton éclairage, je continue mes recherches.
Si d'autres personnes ont déjà rencontré ce bug, n'hésitez pas Smiley smile
Je vois pas l'intérêt de transmettre l'adresse email dans l'url. Il suffit de faire passer l'id de l'utilisateur ou même juste le token de validation pour récupérer le bon utilisateur dans la base.
Lups a écrit :
1. la source de l'email est du html (si j'ai compris la question Smiley confused )

La source d'un email au format HTML n'est pas du HTML, en fait pour de vrai. Smiley smile

Quant à tester l'URL en clair: si Hotmail applique un traitement sur le contenu des attribut src ou href dans un email HTML, il peut ne pas être appliqué sur du texte en clair.
Encore une fois, concernant le débat email/id + token : la décision de procéder ainsi a été décidé bien avant que je commence à intervenir sur ce site. Reste qu'on pourra toujours changer la façon de faire par la suite.


Dans tous les cas, merci à tous les deux pour vos réponses Smiley smile .


@Florent, histoire d'éclaircir la chose, qu'entendais-tu par "source de l'email" ?
Lups a écrit :
@Florent, histoire d'éclaircir la chose, qu'entendais-tu par "source de l'email" ?

J'entends le fichier qui est échangé par les serveurs de messagerie.
Dans GMail tu peux afficher la source d'un email. D'après une recherche rapide c'est possible dans Windows Live Mail aussi. Je pense que ça doit être possible avec au moins une partie des clients mail desktop aussi.
Bon, résultat : passage de l'id à la place du mail et tout le monde heureux.


Merci à vous deux pour les précisions et aide diverses Smiley smile