Следует ли разрешать Unicode в именах пользователей?

Почему большинство (все?) Веб-сайтов поддерживают только имена пользователей в ASCII? Существуют ли какие-либо соображения безопасности, если администратор решает начать принимать имена пользователей Unicode?

49
задан Bergi 4 October 2014 в 07:19
поделиться

8 ответов

Гомоглифические атаки. Пользовательские «cat» и «сat» - это разные строки Unicode, хотя они выглядят одинаково. Первая буква во втором «сat» - это русская «с», а именно «Кирилическая строчная буква ES». Система не может легко определить, что вы подделываете имя другого пользователя - для компьютера ники разные.

Edit: Предотвращение смешанных скриптов не решает проблему. Например, «сосо» - это чистый кириллический шрифт, который может использоваться для имитации ascii «кокос».

Кроме того, переопределение слева направо (и друзья). Оставьте их без дезинфекции, и они испортят всю вашу страницу.

58
ответ дан 7 November 2019 в 11:48
поделиться

Я бы сказал, что простой ASCII встречается редко. Часто просто никто об этом не думает, так как в Западной Европе латынь 1 подходит и для США. В некоторых базах данных делается различие между текстом в устаревших наборах символов и Unicode ( varchar vs. nvarchar ) или для других баз данных должен быть установлен специальный набор символов.

Особенно в США многие люди даже не замечают, что ASCII недостаточно. Некоторые пытаются найти оправдания с помощью «Пользователи должны ввести это» или подобного, хотя в большинстве случаев это подделка.

Отвечая на ваш вопрос, я сомневаюсь, что существуют соображения безопасности, за исключением, может быть, подмены имен других людей с использованием разных скриптов (a и а выглядят одинаково, но одно на латинице, другое на кириллице - это уже делалось с URL-адресами раньше). Обычно я считаю это оплошностью разработчиков, которым, вероятно, следует знать лучше.

2
ответ дан 7 November 2019 в 11:48
поделиться

HTTP-аутентификация? Могут возникнуть проблемы с отправкой имени пользователя (и / или пароля) Unicode по существующим протоколам. Один случай, с которым я сталкивался раньше, - это обычная проверка подлинности. Не существует четко определенного способа обработки отправки этих имен пользователей / паролей Unicode в основных заголовках аутентификации.

6
ответ дан 7 November 2019 в 11:48
поделиться

Ваше наблюдение не всегда верно. И выбор ASCII во многом зависит от человеческого фактора, а не от технических проблем или вопросов безопасности.

В большинстве случаев это просто для простоты программирования. Программист никогда не знает, что все программное обеспечение, библиотеки, утилиты на сайте сломаются или нет с некоторыми символами. Зачем рисковать при разработке веб-сайта, когда ASCII работает хорошо? Кроме того, некоторые упакованные веб-программы будут препятствовать использованию Unicode в имени пользователя. Это способствует тому, что многие веб-сайты поддерживают имена пользователей только в формате ASCII.

Теоретически все текущее программное обеспечение может хорошо обрабатывать 8-битные данные. В настоящее время нет проблем с хранением или передачей. Даже если некоторых протоколов нет, их можно перевести в UTF-7 или с другими схемами преобразования.

Есть некоторые проблемы с Unicode. Это больше на стороне обработки данных. Это может быть отображение, шрифты, готовность программного обеспечения и программных библиотек к символам, отличным от BMP, сопоставление, сравнение, методы ввода, инструкции по написанию. Администраторы могут быть недостаточно осведомлены, чтобы справиться с ними. В зависимости от характера веб-сайта это может быть проблемой, но в большинстве случаев это не так.

Для администраторов непросто ввести некоторые экзотические символы. Это затрудняет поиск пользователей администратором. Администратору также сложно убрать оскорбительные имена пользователей на иностранных языках с веб-сайта.

Однако нередко китайские имена пользователей используются на китайских веб-сайтах. Это может быть не всегда в ASCII. То же самое и с другими культурами и языками. Некоторые глобальные проекты принимают почти все виды символов Unicode. Википедия - тому пример.

3
ответ дан 7 November 2019 в 11:48
поделиться

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

-2
ответ дан 7 November 2019 в 11:48
поделиться

Или, мы можем просто перестать заботиться о том, как выглядит имя пользователя, и можем ли МЫ его произнести/запомнить. Это должно быть заботой пользователей. Если никто не помнит вас, это ваша потеря. А что касается подмены имени, то это почти неизбежно в любом случае. И все же редко можно услышать о подделке имени пользователя.

Представьте себе форум, представьте, что кто-то пишет с учетной записи, которая ПОХОЖА на вашу. У вас возникают проблемы, вы говорите, что не делали этого, публикуете ссылку на свою историю, видите, что сообщения там нет. Нажмите на профиль парня, который ДЕЙСТВИТЕЛЬНО разместил это сообщение, и бам, у вас есть его профиль. Теперь он забанен.

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

-2
ответ дан 7 November 2019 в 11:48
поделиться

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

Рассмотрим основной случай нарушения чувствительности к регистру: в турецком языке имена пользователей «Id1» и «id1» разные (в турецком есть два разных Is, один с точкой, а другой без, в результате 2 заглавными и 2 строчными буквами, которые не соответствуют тем же правилам ввода заглавных букв, что и английский язык). Таким образом, хотя любой турок может ввести свое имя на своем родном языке, программа не будет обрабатывать его имя так, как он ожидает - вместо этого оно претерпит странное преобразование в мутантный английский.

Специальные латинские символы в европейских языках имеют схожие совпадения, поэтому выбор языка, на котором они вводятся, кажется случайным. В других регионах мира есть похожие общие символы, где правила использования различаются - в некоторых случаях - национальная и культурная ненависть. может привести к очень сердитым людям, когда символы, составляющие их имя пользователя, рассматриваются так, как если бы оно было написано на языке их ненавистного врага (из-за того, что это значение по умолчанию для этих иностранных символов в операционной системе).

4
ответ дан 7 November 2019 в 11:48
поделиться

Хотя вообще сомнительно, почему для идентификации пользователя должно быть имя пользователя, а не просто «пароль», я думаю, что нет причин запрещать имена пользователей в формате Unicode.

Что еще более важно, так это то, что этот пароль должен проверяться как независимый от языка: он должен обрабатывать нажатия клавиш независимо от настроек клавиатуры пользователя. Это означает, что «שלום» и «akuo» будут одним и тем же паролем.Это важно, потому что пользователь часто не видит символы пароля, которые он набирает, и сильно злится, если включен CAPSLOCK.

6
ответ дан 7 November 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: