Я работаю над адаптацией своего веб-приложения, и мне интересно, как дезинфицировать пользовательский ввод для полей данных, таких как имя или название компании. Сначала я ограничил ввод только буквами и цифрами, но понял, что это не работает для O'Malley с кавычками, évoù с диакритическими знаками и KLA-Tencore с дефисом. Какое хорошее ограничение ввода для очищенных пользовательских данных?

Спасибо.

2
frenchie 8 Июн 2016 в 01:24
2
Я просто оставлю это здесь: kalzumeus.com /2010/06/17/… По сути: если вы попытаетесь провести санитарную обработку, вы испортите чье-то имя.
 – 
Michael Kohne
8 Июн 2016 в 17:18

4 ответа

Будьте осторожны с использованием методов, которые помешают некоторым из ваших пользователей ввести свои настоящие имена. Имена очень личные, и фраза «вы не можете использовать свое настоящее имя» не всем понравится. Я помню, как минимум раз в месяц имел дело с клиентом, который был расстроен тем, что не может использовать свое имя через дефис (это была редко используемая система, где вашим паролем обязательно должна была быть ваша фамилия — не моя, не спрашивайте) . Она не понимала, почему она не могла его использовать, и объяснение ей не понравилось. По этому поводу была довольно громкая негативная реакция, такая как Facebook поссорился с ирландскими пользователями, которым сказали «использовать настоящее имя».

PixelSnader прав в том, что ответ будет зависеть от того, что заполняет ваш пользователь. Ваша технология — другая сторона этого уравнения. Например, PHP явно не любит имена файлов с 'странные персонажи'.

Однако, по моему мнению, вы должны приложить все усилия, чтобы размещать специальные символы там, где это возможно. Если вам необходимо дезинфицировать специальные символы, вы должны приложить все усилия, чтобы сделать это прозрачным для пользователя.

Что касается методологий, с учетом разрешения Facebook мне было бы любопытно посмотреть, как они это делают, но одним из возможных вариантов для определенных полей может быть кодирование ввода и его декодирование при необходимости. У OWASP есть несколько предложений по стратегиям проверки данных, включая кодировку Base64.

3
Community 23 Май 2017 в 15:39

как очистить пользовательский ввод для полей данных, таких как имя

Либо

1
Community 23 Май 2017 в 15:39

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

Tl;dr Никогда не изменяйте данные пользователя; просто используйте его безопасно.

1
michael 9 Июн 2016 в 05:10

Ознакомьтесь с часто используемыми разрешенными форматами и символами для ввода текста. Например, электронная почта допускает AZ, AZ, 1-0 и !#$% &'*+-/=?^_`{|}~. Доменные имена, с другой стороны, позволяют использовать только A-Z, a-z, 1-0 и дефисы.

Не существует простого универсального решения для пользовательского ввода. Это сильно зависит от контекста. Что они заполняют, как они это заполняют, откуда они и т.д.

Если это логин или URL/имя страницы, я бы держался подальше от необычных символов. Как набрать "é" на телефоне? Поэтому я бы предложил только буквы (разрешить заглавные буквы, но не учитывать их) и один, может быть, два разделителя. Если компания называется O'Malley's Hardware and Tools, они могут использовать O-Malleys-Hardware-And-Tools (или более разумный O-Malleys).

Однако, если это поле для целей отображения, вы можете разрешить больше. Потенциально все символы Юникода, хотя это приводит к множеству других проблем, таких как отсутствующие символы в шрифте или что-то еще. Технически это не принесет вреда, но хотя O´Malleys использование определенного знака может быть оптимальным, но O'Malleys или O-Malleys могут быть предпочтительнее O󴈿Malleys.

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

-3
PixelSnader 9 Июн 2016 в 00:54
4
"Как вы набираете "é" на телефоне?" — Наверное, так же легко, как на своем "3". Несколько миллиардов человек, вероятно, могут набрать 李四 на своем телефоне так же легко, как вы или я набираем «john smith». Сейчас 21 век, а не 1963 год. Любое программное обеспечение, не являющееся антипотопным, должно уметь работать с настоящими именами людей.
 – 
RedGrittyBrick
8 Июн 2016 в 16:57
Я набираю 3 на своем телефоне с помощью 1 кнопки. Даже на ПК одним нажатием кнопки вы не получите все символы с латинским акцентом.
 – 
PixelSnader
9 Июн 2016 в 00:27