Подтвердить что ты не робот

Какими должны быть действительные символы в именах пользователей?

Многие веб-системы аутентификации пользователей не позволяют именам пользователей, которые содержат символы, отличные от букв, цифр и символов подчеркивания.

Может ли быть техническая причина для этого?

4b9b3361

Ответ 1

Хорошо продуманная система не обязательно должна предотвращать появление каких-либо специальных символов в именах пользователей.

Таким образом, причина подчеркивания традиционно принимается, является то, что подчеркивание обычно рассматривается как "слово", а также буквы и цифры. Обычно это различение отличается от другого. Это справедливо в регулярных выражениях и даже на базовом уровне в большинстве операционных систем (наберите знак подчеркивания в слове и дважды щелкните по буквам. Выбор будет продолжен после подчеркивания. Теперь попробуйте то же самое с тире, скорее всего, это будет нет.)

Ответ 2

Да: чтобы избежать специальных символов. Ленивые программисты просто отбрасывают то, что пользователь вводит, прямо в код где-то, и это то, что приводит к инъекционным атакам.

Даже если он не используется злонамеренно, позволяя пользователю вводить символы, конфликтующие где-то в другом месте, может быть более сложным, чем необходимо. Например, если вы решили создать каталог файловой системы для каждого пользователя, чтобы сохранить их загрузки, то имя пользователя должно соответствовать правилам именования каталогов на этой ОС (например, нет \/:*?"<>| в Windows).

Как только вы избегаете столкновений, подобных названию каталога, и удаляете "';% и //, чтобы избежать атак на атаку, вы удалили большую пунктуацию и "почему кому-то даже нужна пунктуация в имени пользователя"?

Намного легче было написать быстрое регулярное выражение для проверки имен пользователей с помощью [a-zA-Z0-9_] и сделать с ним, чем сфокусироваться на том, чтобы выяснить всю возможную пунктуацию, которая не будет конфликтовать, или каким-либо образом сопоставить их с другими символами.

Затем, как и многие вещи в области вычислений, как только достаточно людей начинают иметь только буквы, цифры и символы подчеркивания для имен пользователей, и люди начинают создавать имена пользователей для этой спецификации, они стали стандартом де-факто и сами увековечивают!

Ответ 3

Если не указано, я использую это:

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

Для этого требуется длина 4 с максимум 32 символами. Он должен начинаться с символа слова и иметь непрерывные точки и тире. Единственная причина, по которой я использую это, - это то, что он достаточно строг, чтобы интегрироваться с чем угодно:)

Действителен:

test.tost

Неверно:

test..tost

Ответ 4

Потому что он позволяет несколько слов быть представленным несколько читаемым образом.

Перонально я действительно, действительно желал, чтобы люди немного расширили вещи, чтобы позволить тире и апострофы. Это позволило бы людям использовать неэнгенские фонетические имена (например: имена родоначальников американского происхождения, такие как She-Ki и Ke`Xthsa-Tse).

Ответ 5

Мне не нравится аргумент удобочитаемости, когда он вмешивается в способность людей использовать свой родной язык в именах пользователей.

Я рекомендую вам экспериментировать с использованием классов символов, которые включают http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories или http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedNamedBlocks. Я не пробовал это, но

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

может стоить эксперимента.

Ответ 6

Основные причины, по которым веб-сайты применяют такие правила, являются читабельностью (поскольку имена пользователей, такие как ~-|this<>one|-~, раздражают). Это также может быть связано с тем, что оно меньше работает (подчеркивания соответствуют регулярному выражению \w+, в то время как тире и другие специальные символы - нет), но я сомневаюсь, что основная причина.

Нет "стандарта", поэтому, если ни один из приведенных выше причин не беспокоит вас, сделайте все, что захотите. Лично я хотел бы, чтобы другие веб-сайты принимали тире и периоды, но это действительно личное предпочтение читаемости и согласованности с выражением.

Ответ 7

Ограничение этих символов (или даже их подмножество ASCII) не позволяет использовать имена пользователей, такие как like. Если вы не принимаете эти символы, вы можете предотвратить широкий диапазон или имена пользователей, которые похожи на другие имена.

Ответ 8

Зависит от того, как используются ваши имена пользователей. Нет общего правила, не зная контекста.

Ответ 9

Подчеркивание традиционно допускается в идентификаторах на большинстве языков программирования и, как правило, является единственным "специальным" символом. Но многие веб-логики по-прежнему не принимают ЛЮБОЙ специальный символ и ограничены символами нижнего/верхнего регистра и цифрами...
И другие отлично с действительно особенными, -)

Ответ 10

Люди могут захотеть написать свои имена пользователей, подобные этому, а не liketis или LikeThis.