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

Какие ограничения я должен налагать на имена пользователей

  • Какие ограничения я должен налагать на имена пользователей? почему?
  • Какие ограничения я не должен налагать на имена пользователей? почему?

P.S. db - это наилучшая практика PDO, поэтому риск внедрения sql

Спасибо

4b9b3361

Ответ 1

ОК, поэтому допустим, что вы выполняете все свои задачи по кодированию строк. У вас нет инъекций SQL, инъекций HTML или мест, где вы не кодируете URL-адреса. Поэтому нам не нужно беспокоиться о таких персонажах, как "< &% \", которые являются магии в некоторых контекстах. И вы используете UTF-8 для всего, чтобы весь Unicode был в игре. Какие еще существуют причины для ограничения имен пользователей

Для начала, все управляющие символы, для здравомыслия. Нет никаких причин иметь символы U + 0000 в U + 001F или U + 007F до U + 009F в имени пользователя.

Далее, запретить или нормализовать неожиданные пробелы. Возможно, вы захотите разрешить пробел в имени пользователя, но вы почти наверняка не хотите разрешать начальные пробелы, конечные пробелы или несколько пробелов подряд. Они могут сделать то же самое в HTML, но, вероятно, это ошибка пользователя, которая будет запутать.

Если вы намерены разрешить использовать это имя для входа в систему через базовую аутентификацию HTTP, вы должны запретить символ :, потому что схема Basic Auth кодирует пару "имя пользователя: пароль" без экранирования, если двоеточие в имя пользователя или пароль. Таким образом, по крайней мере одно из имени пользователя и пароля должно исключать двоеточие, и лучше, чтобы имя пользователя, поскольку ограничение доступа к паролям было намного хуже, чем имена пользователей.

Для базовой проверки подлинности вы также можете отключить все символы, отличные от ASCII, поскольку они обрабатываются разными браузерами по-разному. IE кодирует их с использованием кодовой страницы системы; Firefox кодирует их с использованием ISO-8859-1; Opera кодирует их с помощью UTF-8. Пользователи должны, по крайней мере, быть предупреждены перед выбором не-ASCII-имен, если HTTP Auth будет доступен, так как фактически их использование будет очень ненадежным.

Далее рассмотрим другие управляющие последовательности Unicode, такие как bidi переопределяют, а другие символы, перечисленные там, непригодны для использования в разметке. Вероятно, вы собираетесь положить их в разметку, и вы не хотите, чтобы кто-то с RLO в их имени превращал нагрузку текста на вашу страницу назад.

Кроме того, если вы разрешаете Unicode делать нормализацию по строкам, которые вы получаете. В противном случае у кого-то может быть имя пользователя с составленным символом o-umlaut ö и задаться вопросом, почему они не могут войти в систему на Mac, который по умолчанию будет использовать отдельный символ o, за которым следует объединение umlaut. Обычное нормализовать составленную форму NFC в Интернете. Вы также можете использовать разложения совместимости с использованием формы NFKC; это позволило бы пользователю Крису войти с японской клавиатуры в режиме fullwidth romaji, набрав Криса. Это общие проблемы, которые хорошо решить для всего вашего входа в webapp, но для идентификаторов, таких как имена пользователей, может быть более важно получить право.

Наконец, убедитесь, что длина в порядке, чтобы вписаться в базу данных без тихой усечки, изменяющей имя, особенно если вы храните в виде байтов UTF-8, которые вы не хотите перерезать на полпути через последовательность байтов. Укрупнение имен также может быть проблемой безопасности в целом.

Если вы используете имена пользователей как уникальное средство идентификации, вам гораздо больше нужно беспокоиться о: уже упомянутой проблеме похожих взглядов, таких как Сhris (с кириллицей Es С). Их слишком много для разумного обращения; либо ограничивать ASCII, либо иметь дополнительные средства идентификации пользователей. (Или не волнует, как SO не делает, когда я могу легко называть себя Крисом, в любом случае мне не нужно называть себя С -hris.)

Ответ 2

Зависит от многих вещей, например, если у пользователей будет свой собственный URL-адрес, вы должны быть осторожны, чтобы кто-то, кто создал имя пользователя "% 41llan", не сталкивался с пользователем под названием "Allan", тогда как что может привести к сбою в обратном направлении. Посмотрите на те виды ограничений.

Ответ 3

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

Единственное ограничение, которое я бы добавил, - это максимальная длина, чтобы он мог быть сохранен в таблице DB

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

Ответ 4

Защита SQL-инъекций является обязательной, но это, вероятно, должно быть в вашем коде, а не в ограничениях имени пользователя. Определенные символы обязательно должны быть экранированы, например \,% и т.д.

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

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