Le Livre d'Argent

Encore un site qui accepte les adresses électroniques contenant le signe « + » à l’inscription, mais ne permet pas de réinitialiser son mot de passe si l’adresse contient ce signe 🙄.

Développeuses et développeurs web, à quel point c’est difficile d’utiliser la même fonction pour vérifier la conformité des adresses électroniques partout sur votre site ?

@Sylvhem Ça dépend de plein de trucs. Au niveau de l'interface utilisateur c'est plutôt simple mais ça dépend de si on utilise un framework ou pas, si on a fait une solution maison propre ou pas. Ensuite le traitement qui est fait dans le backend pour envoyer un mail, là aussi ça dépend des libs utilisées côté serveur, et du serveur mail du provideur. En théorie ça marche mais dans la pratique il y a plein d'endroits où ça peut foirer si ça n'est pas fait correctement.

@mayuraviva Il me semble que ça devrait être une des premières choses auquel il faudrait faire attention. Le nombre de fois où je me retrouve bloquée à cause de ça…

Ou encore mieux : à partir de maintenant, tout le monde se met d’accord sur le fait que vérifier une adresse électronique c’est vérifier qu’il y a au moins un @ dans une chaîne de caractères et puis c’est tout.
Comme ça, ça sera compatible avec le RFC 5322 et on foutra enfin la paix aux gens qui ont une adresse électronique un tant soit peu exotique.

@Sylvhem c'est ce que je fais (ou sinon j'utilise des inputs de type e-mail ou des validateurs respectant ladite rfc.

@stupeflo Malheureusement, la spec HTML5 ne respecte pas la RFC… Du coup le champs input e-mail peut refuser des adresses valides.
Mais c’est clair que c’est encore le meilleur compromis.

@Sylvhem Je crois que mon préféré ça reste celui qui autorise la longueur de mot de passe que tu veux à l'inscription.
Mais qui limite le nombre de caractères à la connexion.
C'est toujours fun d'essayer de comprendre ce qu'il se passe dans ces cas-là.

@Sylvhem Peut-être une requête DNS pour vérifier le nom de domaine pour les gens qui sont franchement paranos et tiennent impérativement à faire des vérifications juste pour faire des vérifications, mais sinon ça suffit amplement, oui.
replies
1
announces
0
likes
1

@saorimni Oh mon dieu, cela c’est vraiment les pires. Bonjour pour comprendre d’où vient le problème.

@elzen Même pas, vu que tu peux utiliser une adresse IP à la place d’un nom de domaine dans ton adresse de mémoire.

Vous voulez vérifier si une adresse électronique est valide ? On a déjà un outil pour ça, ça s’appelle « Envoyer un courriel. ».

@saorimni @Sylvhem Ah, sur ce plan-là, je me souviens qu'à une époque, j'avais constaté un souci comme ça par accident dans le réglage par défaut de mon propre Apache (oui, à une époque, j'ai utilisé Apache sur mon serveur perso, j'étais jeune et naïf).

Sauf que dans la conf' par défaut en question, c'était un peu plus intelligemment con : c'était au stockage que le nombre de caractères était limité, donc en fait tu pouvais entrer tous les mots de passe que tu voulais de la longueur que tu voulais, il tranchait les X premiers et calculait son hash avec en ignorant superbement la suite, donc peu importe si tu mettais une limite de caractères en entrée ou pas.

@Sylvhem Alors, techniquement je crois que tu peux, en effet, ça pourra sans doute recevoir du mail. Dans la situation actuelle, je crains qu'il ne faille pas vouloir en envoyer, par contre ^^"

Mais c'est pas ce qu'on demande à ce genre de formulaires, justement, donc bon point en effet.

@elzen @saorimni J’ai eu le même soucis avec MySQL à une époque… Pas dans le contenu des bases hein. Avec le mot de passe de MySQL lui-même 😭.

(Bon et sinon team Apache ici ✌️.)

@Sylvhem Je me suis déjà tué à le dire à des collègues : la regex infernale* ne doit être utilisée que si on veut soi-même faire l’input email sans utiliser la vérification innée du navigateur, le seul moyen universel de vérifier une adresse e-mail c’est d’envoyer un mail et d’attendre une interaction utilisateur en réponse. Ça a le mérite d’être simple, et en prime, c’est tellement omniprésent comme fonctionnement que tout le monde s’y attend et sait le faire. Pas la peine d’essayer de résoudre un problème insoluble.

* La regex infernale étant bien évidemment
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

@Planeshift Mais tu es *sûr* quelle fonctionne pour toutes tes adresses valides ta regex ? Parce que de ce que j’ai compris, c’est presque impossible de vérifier la validité d’une adresse avec une regex.

@Sylvhem Elle marche pour 99,99% des adresses e-mail, et c’est pour ça qu’elle ne doit être utilisées que pour remplacer l’input email côté front si on a vraiment envie, afin de remplacer la regex du navigateur. Parce que celle de <input type="email"> c’est celle-là :

/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

Et elle est encore plus restrictive !

Idéalement, comme tu l’as dit plus haut, le mieux pour le front est simplement de faire "est-ce qu’il y a un @ ? Okay cool". Pour le côté back, on envoie un mail et c’est tout. Toute autre vérification est mignonne mais globalement inutile.

Le site d’où je tire tout mon propos : https://emailregex.com/

@Planeshift Merci pour les précisions !

@saorimni @Sylvhem

souvenir d'un de mes premier linux, que j'ai du réinstaller parce que le "é" dans le mot de passe était accepté à l'installation, mais pas moyen de le faire valider à l'allumage.
J'ai confirmé et fait des tests après, c'était bien ce caractère qui coincait. J'imagine une question d'encodage...

@Sylvhem @sous_mon_masque @saorimni et les démarrages sous "full disk encryption" où le bootloader utilise exclusivement qwerty-us blob_cat_flamethrower