web-dev-qa-db-fra.com

Quels devraient être les caractères valides dans les noms d'utilisateur?

De nombreux systèmes d'authentification d'utilisateur basés sur le Web n'autorisent pas les noms d'utilisateur contenant des caractères autres que des lettres, des chiffres et des traits de soulignement.

Pourrait-il y avoir une raison technique à cela?

22
Emanuil Rusev

Un système bien conçu ne doit pas nécessairement empêcher l'utilisation de caractères spéciaux dans les noms d'utilisateur.

Cela dit, la raison pour laquelle les caractères de soulignement ont toujours été acceptés est que ce dernier est généralement traité comme un caractère "Word", avec des lettres et des chiffres. C'est généralement le seul autre personnage à faire cette distinction. Ceci est vrai dans les expressions régulières, et même au niveau de base dans la plupart des systèmes d'exploitation (tapez un trait de soulignement dans un mot et double-cliquez sur les lettres. La sélection s'étendra au-delà du trait de soulignement. Essayez maintenant la même chose avec un tiret. ne pas.)

16
Nicole

Oui: pour éviter de devoir échapper à des caractères spéciaux. Les programmeurs paresseux vont simplement laisser tomber ce que l'utilisateur tape, directement dans le code, et c'est ce qui conduit aux attaques par injection.

Même s'il n'est pas utilisé à des fins malveillantes, le fait de permettre à l'utilisateur de taper des caractères qui seront en conflit ailleurs peut s'avérer plus compliqué que nécessaire. Par exemple, si vous décidez de créer un répertoire de système de fichiers par utilisateur pour stocker ses téléchargements, le nom d'utilisateur doit être conforme aux règles de dénomination de répertoire sur ce système d'exploitation (par exemple, pas de \/:*?"<>| sous Windows).

Une fois que vous avez évité les conflits, comme le répertoire qui en nomme un, et supprimé les codes "';% et // pour éviter les attaques par injection, vous avez supprimé la plupart des signes de ponctuation, et "pourquoi même quelqu'un a-t-il besoin de signes de ponctuation dans son nom d'utilisateur"?

Il était beaucoup plus facile d'écrire une expression rationnelle rapide pour valider les noms d'utilisateur contre [a-zA-Z0-9_] et en finir avec le processus, plutôt que de chercher à déterminer toutes les ponctuations possibles qui ne se contrarieraient pas, ou à les mapper d'une autre manière.

Ensuite, comme dans de nombreux domaines informatiques, dès que suffisamment de personnes commencent à avoir juste des lettres, des chiffres et des caractères de soulignement pour les noms d'utilisateur, et que les gens commencent à créer des noms d'utilisateur correspondant à cette spécification, cela devient le standard de facto et se perpétue!

14
Rikki

Lorsque non spécifié, j'utilise ceci:

^\w(?:\w*(?:[.-]\w+)?)*(?<=^.{4,32})$

Cela nécessite une longueur de 4 avec un maximum de 32 caractères. Il doit commencer par un caractère Word et peut comporter des points et des tirets non continus. La seule raison pour laquelle je l'utilise c'est parce qu'il est assez strict pour s'intégrer à presque tout :)

Valide:

test.tost

Invalide :

test..tost

6
Diadistis

Je n'aime pas l'argument de la lisibilité lorsqu'il interfère avec la capacité des personnes à utiliser leur langue maternelle dans les noms d'utilisateur.

Je vous recommande d'utiliser des classes de caractères incorporant http://msdn.Microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories ou http://msdn.Microsoft.com/en- us/library/20bw873z.aspx # SupportedNamedBlocks . Je n'ai pas essayé ça, mais

[\p{L}\p{N}\p{M}]

pourrait valoir une expérience.

3
John Saunders

Parce que cela permet à plusieurs mots d'être représentés de manière quelque peu lisible.

Peronally je vraiment, vraiment souhaite que les gens développent un peu les choses pour permettre les tirets et les apostrophes. Cela permettrait aux gens d'utiliser des noms phonétiques non anglais (par exemple: noms de tribus amérindiennes comme She-Ki et Ke`Xthsa-Tse)

3
T.E.D.

Le limiter à ces caractères (ou même au sous-ensemble ASCII) empêche les noms d'utilisateur tels que ????????????????? d'être accepté. En n'acceptant pas ces caractères, vous pouvez empêcher une large gamme de noms d'utilisateur qui ressemblent à d'autres.

2
medgno

La principale raison pour laquelle les sites Web appliquent de telles règles est la lisibilité (parce que les noms d'utilisateurs tels que ~-|this<>one|-~ sont gênants). C'est peut-être aussi parce que cela demande moins de travail (les caractères de soulignement sont mis en correspondance par une regex \w+, contrairement aux tirets et autres caractères spéciaux), mais je doute que ce soit une raison majeure.

Il n'y a pas de «standard», donc si aucune des raisons ci-dessus ne vous dérange, faites ce que vous voulez. Personnellement, j'aimerais que davantage de sites Web acceptent les tirets et les points, mais c'est vraiment une préférence personnelle de lisibilité et de cohérence par rapport à l'expression.

2
Sasha Chedygov

Cela dépend de la façon dont vos noms d'utilisateur sont utilisés. Il n'y a pas de règle générale sans connaître le contexte.

1
Noon Silk

Le soulignement était traditionnellement autorisé dans les identificateurs dans la plupart des langages de programmation et était généralement le seul caractère "spécial" autorisé.
Mais beaucoup de connexions Web n'acceptent toujours AUCUN caractère spécial et sont limitées aux minuscules/majuscules et aux chiffres ...
Et d'autres vont bien avec des vraiment spéciales ;-)

1
François

Les gens voudront peut-être écrire leurs noms d'utilisateur tels que_cette plutôt que likethis ou LikeThis.

0
John