après avoir examiné ce , j'ai réalisé que j'ai encore quelques questions à gauche concernant le sujet. p>
Y a-t-il des caractères qui devraient être «laissés échapper» à des fins de sécurité légitimes? Cela inclut tous les caractères em>, tels que des crochets, des virgules, des apostrophes et des parenthèses. p>
En ce sujet, je ne comprends pas pourquoi les administrateurs semblent aimer appliquer la règle "Vous ne pouvez utiliser que l'alphabet, les numéros et les espaces". Est-ce que autre chose a le potentiel d'être un défaut de sécurité ou de casser quelque chose que je ne suis pas au courant (même en ASCII)? Aussi loin que j'ai vu pendant mes jours de codage, il n'y a absolument aucune raison que tout personnage devrait être interdit d'être dans un nom d'utilisateur. p>
6 Réponses :
Ce sont souvent exactement ces caractères pouvant être utilisés pour injecter du code malveillant dans votre programme. Par exemple Injection SQL (citations, tirets, etc.), XSS / CSRF (citations, accessoires de poisson, etc.) ou même une injection de langage de programmation lorsque Ces caractères ne traitent généralement pas lorsque vous émettez le développeur désinfectionner correctement l'entrée / sortie contrôlée par l'utilisateur, c'est-à-dire tout ce qui entre dans la requête HTTP; les en-têtes, les paramètres et le corps. Par exemple. requêtes paramétrées ou en utilisant eval () code > est utilisé ailleurs dans votre code. P>
mysql_real_escape_string () code> lors de l'affliction dans une requête SQL pour prévenir les injections SQL et HTMLSpecialchars () code> lors de l'amortissement en HTML pour prévenir les XSS. Mais je peux imaginer que les administrateurs ne font pas confiance à tous les développeurs, ils ajoutent donc ces restrictions. P>
Voir aussi: h3>
Tous les sites n'utilisent pas SQL, certainement tout ce qui utilise SQL utilise MySQL, ce n'est donc pas un point valide. Il existe également de meilleurs moyens de prévenir les XSS (déclarations préparées) et le CSRF est complètement différent et n'a rien à voir avec Unicode
Je suis en fait à la fois admin et développeur du site que je crée, c'est pourquoi j'ai pensé à cette question. Je voulais permettre à mes utilisateurs d'être "créatifs" avec leurs noms d'utilisateur (ainsi que de supporter ceux qui sont en fait multilingues ou originaires de différents pays). Peu importe que vous avez acheté des points extrêmement bons. Ce que vous avez déclaré était proche de ce que j'avais imaginé que la réponse pourrait être. @DMitri: Vous devriez remarquer que l'une de mes balises est "mysql". :)
@DMitri: Le OP l'a marqué et c'était juste un exemple (par exemple). XSS est l'une des sources de CSRF (et n'a rien à voir avec des déclarations préparées). Et en effet, cela n'est pas lié à Unicode, je n'ai pas impliqué cela nulle part.
Je pense que la plupart du temps où les choses (noms d'utilisateur ou mots de passe) sont forcées à ASCII, c'est parce que quelqu'un a peur que des ensembles de caractères plus complexes provoquent une rupture dans un composant inconnu. Si cette peur est justifiée ou non dépend de l'affaire, mais essayant de vérifier que toute votre pile est vraiment unicode correctement dans tous les cas pourraient être difficiles. Cela va de mieux tous les jours, mais vous pouvez toujours trouver des problèmes avec Unicode à certains endroits. P>
Je garde personnellement mes noms d'utilisateur et mes mots de passe ASCII, et j'essaie même de ne pas utiliser trop de ponctuation. Une des raisons est que certains dispositifs d'entrée (comme certains téléphones portables) le rendent difficile à accéder à certains des caractères plus ésotériques. Une autre raison est que j'ai une fois déjà rencontré un système qui n'avait aucune restriction sur le contenu du mot de passe, mais ensuite baisée si vous avez utilisé autre chose qu'une lettre ou un numéro. P>
Donc, fondamentalement, la plupart des administrateurs / développeurs sont simplement dans ce cas d'être paresseux et de ne pas vouloir soutenir leurs utilisateurs de différentes régions du monde. ;) Cependant, aussi loin que les téléphones aller, je ne suis pas au courant de ce projet particulier qui les travaillait bien avec eux, donc c'est un peu discutable pour moi et cela. Je peux voir pourquoi vous voudriez prendre le temps de les mentionner cependant. Merci pour ça.
Je ne sais pas que c'est si mal. Ces jours-ci, beaucoup de gens sont (enfin!) Commencez à obtenir leur acte unicode ensemble. Malheureusement, il est toujours trop facile d'écrire des applications qui ne font pas unicode, et il y a beaucoup de logiciels anciennes avant la mise à jour d'UNICODE qui doit être mis à jour. Franchement, je ne peux pas blâmer les gens d'essayer de ne pas rencontrer de nouvelles conditions de bord étrange dans le logiciel qu'ils ont déployés.
Oh, c'est très mauvais. Je blâme les développeurs et les administrateurs qui ne peuvent pas voir au-delà des extrémités de leurs nez anglophones. Pardonne-moi d'être avancé avec cela, mais rappelez-vous que "www" ne signifie pas "les locuteurs anglaises seulement" - plus comme "World-World" - ce qui arrive à inclure des langues autres que celle que nous utilisons ici. Pour moi, et d'autres, "bizarre, de nouvelles conditions de bord" pourrait très bien inclure être limitée à une langue. Bien sûr, je ne peux pas vraiment vous blâmer. Il y a quelques pays remplis de personnes qui pensent que la seule langue réelle dans le monde est l'anglais, alors pourquoi soutenir toute autre chose?
Je suis désolé, je pense que je n'étais pas clair: je ne disais pas que c'était ok qu'ils ne faisaient pas ces choses. C'est juste qu'ils n'essayent pas de verrouiller les gens. Mais vous devez comprendre les choses du point de vue du développeur: a-t-il mis le site avec des limitations stupides et commençant à obtenir des utilisateurs (et pour une société, de l'argent) ou passe-t-il un mois supplémentaire ou deux essai de nettoyer les problèmes dans Une pile qu'il n'a peut-être pas autant de contrôle? Ce n'est pas une bonne situation, mais ce n'est pas que les Devs sont tous secoués - surtout, ils travaillent juste dans les limites qu'ils ont.
Je ne pense pas qu'il y ait une raison de ne pas autoriser Unicode dans le nom d'utilisateur. Les mots de passe sont une histoire différente, car vous ne voyez généralement pas de mot de passe lorsque vous le saisissez dans un formulaire, permettant uniquement à ASCII est logique de prévenir la confusion possible. P>
Je pense qu'il est logique d'utiliser l'adresse e-mail comme identifiant de connexion plutôt que de nécessiter de créer un nouveau nom d'utilisateur. Ensuite, l'utilisateur peut sélectionner n'importe quel pseudo, à l'aide des caractères Unicode et que Nick est affiché à côté des messages et des commentaires de l'utilisateur. P>
N'est-ce pas comment c'est fait sur Facebook? P>
Je peux voir comment cela fonctionnerait bien pour Facebook, mais compte tenu de la moitié de l'attraction de nombreux sites, des forums et des forums sont passés par des noms d'utilisateur uniques (même s'ils "spoof" d'autres parfois), je devrais dire que ce n'est pas la meilleure solution. Les utilisateurs seraient alors obligés de se rappeler quel courriel ils sont inscrits avec (sans l'aide d'un «oublié», bien sûr) plus ils devaient choisir un identifiant unique qui n'était pas un email de toute façon. Sinon, j'envisagerais un risque de sécurité (sans oublier un spam).
OpenID est une excellente solution à tous ces problèmes :)
Il n'y a pas la raison de sécurité em> pour ne pas utiliser certains caractères. Si vous gérez correctement toutes les entrées, cela ne fait aucune différence si vous ne manipulez que des caractères alphanumériques ou des chinois. P>
It est em> plus facile à gérer uniquement les noms d'utilisateur alpnum. Vous n'avez pas besoin de penser à l'ambiguïté avec des collations dans votre base de données, de coder des noms d'utilisateur dans les URL et des choses comme ça. Mais encore une fois, si vous manipulez correctement, il n'y a pas de raison technique contre elle. P>
Pour des raisons pratiques, les mots de passe sont souvent uniquement alphanumériques. La plupart des entrées de mot de passe n'acceptent pas l'entrée IME par exemple, il est donc presque impossible d'avoir un mot de passe japonais. Il n'y a pas de raison de sécurité pour interdire cependant des caractères non alphanum. Au contraire, plus l'alphabet utilisable est grand, mieux c'est. P>
Je suis un peu déchiré des mots de passe maintenant, car je ne veux bien sûr pas que mes utilisateurs entrent dans des mots de passe "mauvais" et ne réalisant pas ce qu'ils ont fait, mais bien sûr, je suis de même avis que plus le mieux est grand. Toute chance d'une solution?
@Zydeco peut-être simplement afficher un avertissement sur les lignes de "Vous ne pourrez peut-être pas accéder à ce mot de passe sur une machine différente, assurez-vous de savoir ce que vous faites" i> si l'utilisateur est entré caractères non alnum? Je m'attendrais à la plupart des gens que peut i> entrer un mot de passe non alnum pour connaître les implications, donc je ne m'en avais pas trop. Le pire des cas, l'utilisateur peut simplement réinitialiser son mot de passe.
Haha. Je n'ai pas tenu compte du "pire des scénarios". ;)
Si votre application gère correctement l'entrée Unicode, j'aurais certainement autorisé des caractères non-ASCII dans les noms d'utilisateur et les mots de passe, avec quelques mises en garde: P>
Si vous utilisez l'authentification de base HTTP, vous ne peut pas em> prenant en charge correctement les caractères non-ASCII dans les noms d'utilisateur et les mots de passe, car le processus de réussite de ces détails implique un encodage-to-bytes- En-base64 étape que, actuellement, les navigateurs ne sont pas d'accord sur: p>
Si vous utilisez des cookies, vous devez vous assurer que les caractères Unicode sont codés d'une manière ou d'une autre (par exemple, l'encodage d'URL), comme une fois à nouveau en essayant d'envoyer des caractères non-ASCII fournit des résultats très différents dans différents navigateurs. P > li>
ol>
"Vous ne pouvez utiliser l'alphabet, les numéros et les espaces" p>
blockQuote>
Vous obtenez des espaces? Luxe! P>
Il y a un risque impliqué si certaines parties de votre programme assument des chaînes avec différents octets em> sont différentes, mais d'autres parties du programme compareraient des chaînes en fonction de la sémantique Unicode et pensent qu'ils sont les mêmes. p>
Par exemple, desystems de fichiers sur Mac OS X appliquent une représentation uniforme des caractères Unicode, donc deux noms de fichiers différents De la même manière, on peut produire Séquences d'octets UTF-8 non valides lorsque les points de code 1 octet sont codés USNIG Plusieurs octets (appelés séquences eluffs). Si vous normaliser ou rejeter l'entrée UTF-8 avant de le traiter, cela sera en sécurité, mais par ex. Si vous utilisez une langue de programmation de la programmation Unicode-ignorant et une base de données d'unicode, ces deux verront différentes entrées. P>
afin d'éviter cela: p>
Vous devez filtrer l'entrée UTF-8 le plus tôt possible. Rejetez des séquences invalides / ternues. P> li>
Lorsque la comparaison des piqûres Unicode convertissez toujours les deux côtés de la comparaison sur la même forme normale Unicode. Pour les noms d'utilisateur, vous voudrez peut-être que NFKD réduit la quantité d'attaques d'homographe possibles. P> LI>
ul> ± code> ('A avec ogonek') et A code> + code> (latin A suivi par "Alling Ogonek") se référera au même fichier. P>
Une autre raison possible est que, à l'aide d'unicode, vous pouvez parfois faire du caractère apparaissent identique ou presque identique à une lettre latine-1, permettant d'imiter un autre utilisateur. Une raison de plus possible est qu'il est plus facile d'effectuer une "recherche" par nom d'utilisateur si vous connaissez le codage.
Je ne suis pas particulièrement inquiet pour l'impersonnation, puisque comme toutes les bonnes activités utilisateur du système ne sont pas suivies par le nom d'utilisateur seul. Chaque utilisateur est attribué à un «numéro d'identification» qui peut être examiné dans le cas des divergences pouvant survenir. En fait, le système est basé davantage sur le numéro d'identification que celui d'utilisateur, d'empêcher ce type de chose de se produire. Les utilisateurs ont la possibilité de rechercher par UserID ou Nom d'utilisateur.
@Zydeco, RE-LIRE B> Votre dernière phrase: "Les utilisateurs ont la possibilité de rechercher par UserID ou Nom d'utilisateur." I> Il y a l'occasion idéale pour l'usurpointe de se produire. Lorsque les utilisateurs copient et collectent du texte dans cette zone de recherche ( texte i> qu'ils reçoivent des forums et des discussions en ligne), ils appuyent sur le bouton "Recherche" en pensant qu'ils recherchent le profil de cet utilisateur. Mais ils sont réellement dirigés vers le profil d'User-X à la place, qui a un nom d'utilisateur Unicode-Spoof de l'utilisateur envisagé.