С чего начинается работа с приложением, ботом или сайтом? Ответ прост — с регистрации пользователя в вашей системе.

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

Кажется, что может быть проще регистрации? Сделал стринговую переменную с ФИО, закрыл дело и пошел писать настоящий функционал. Но не тут-то было.

С вероятностью 90%, если вы сделаете так, то поначалу все будет хорошо работать, однако через некоторое время могут возникнут проблемы. Вы посмотрите в свою БД и обнаружите огромное количество мусора вместо данных, а в худшем — вы найдете свою базу в открытом доступе на всяких сомнительных форумах.

Почему это произошло?

Если у вас такой выбор даты, то можете ее просто убрать, никакого смысла в ней нет
Если у вас такой выбор даты, то можете ее просто убрать, никакого смысла в ней нет

Во-первых, никакой мотивации давать вам свои реальные данные у пользователя нет, например, в стиме 93% пользователей родилось 1 января. Объясняется такая аномалия очень просто — первый день в году стоит по умолчанию в форме выбора даты рождения и, конечно, пользователь не тратит свое время на выбор реальной даты, а просто жмет кнопку ОК и идет качать игры. И получается, что эти данные просто мусор и никакой адекватной аналитики сделать не получится. Почему это плохо, я не буду тут писать, вы все сами понимаете. Ну, а второе — просто безопасность, но об этом я расскажу чуть позже.

У нас есть проблема и нам надо ее решать. Как всегда, нужно использовать кнут и пряник для баланса. Как накормить кондитерским изделием — это задача вашего продукта, потому что для каждого случая все уникально. А вот кнут достаточно стандартный и универсальный для всех проектов.

Регулярные выражения

Очевидным решением будет проверять на адекватность данные, которые пишет пользователь. Есть всякие исключения, но, как правило, людей не зовут "X Æ A-12". Поэтому можно смело внедрять регулярные выражения и прогонять через них данные от пользователя.

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

Итак, вам в начале надо определиться о ЦА вашего продукта, поскольку каждый конкретный выбор поведет вас по уникальному пути. Продукт для какого рынка? Русского или зарубежного? Если зарубежного, то какого — китайского или европейского? Пользователи пишут на латинице, кириллице или на своей уникальной системе письма?

Да-да, это все нужно для простой и тупой, на первый взгляд, задачи как регистрация пользователя. Дело в том, что мы с вами европейцы и мыслим соответствующее, а в мире огромное количество народа с другими культурами, у которых другой тип письменного мышления, если это так можно назвать. Вариантов огромное количество, более опытные люди расскажут вам о работе со всякими редкими вещами по типу старомоногольской вертикальной письменности ᠮᠤᠩᠭᠤᠯ ( Вот тут забавно, хабр не умеет корректно отображать такой вариант письма) или арабской вязи. Поэтому определяемся, с чем мы будем работать и отсекаем все лишнее. По стандарту будем регистрировать человека на кириллице, в регулярных выражениях разрешаем только её.

Но есть одиннадцать нюансов:

  1. ФИО одним полем.

    Зачастую вместо трех полей делают одно, куда предлагают ввести все, что у человека есть. Кажется, в чем тут проблема? Первое слово — фамилия, второе — имя, а третье, соответственно — отчество. Но не тут было, во-первых, пользователи часто путают очередность, во-вторых, уних может быть двойное имя или отсутствовать отчество. И это либо запретит регистрацию этого пользователя, либо снизит качество данных.

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

2. Двойные фамилии.

Раз уже начали с этим нюансом, то продолжаем. Банальная конструкция из одного поля нормально работает, до того как вам впервые встречается человек с двойной фамилией. И тут возникает проблема — двойная фамилия по сути это одно слово, но знак не принадлежит к кириллице, из-за чего регистрация невозможна. Так что необходимо помнить об этом.

3. Двойные имена.

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

4. ФИО из большого количества слов.

Культурный фактор, мы в России привыкли, что слов в ФИО три, хотя в некоторых странах оно может состоять из большего количества. Поэтому также учитываем это в регулярных выражениях, или делаем пометку какую часть имени и где использовать.

5. Отчество.

Из-за того, что мы все немного русскоцентричны, мы иногда забываем о других культурах, где наименования строились по совершенно другим принципам. Среднеазиатские, японские, китайские, корейские ФИО могут состоять из большего количества слов, и ни одно из них не будет отчеством.

6. Проблемы с Оглы, ибн.

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

7. Несколько видов - .

‐, −, –, —. Нет, это не смайлики, это слева на право: дефис, минус, короткое тире и тире. И если у вас стоит проверка на двойное имя/фамилию, то там должен стоять знак дефиса, но пользователи могут вставить любой другой из этих символов, а регулярка просто не пропустит дальше.

8. Латиница в буквах.

Еще дополнительный аргумент вводить регулярки — это латинские буквы в русских словах. Вы не представляете сколько вам добавит боли выискивать скрытую латинскую "o" в фамилии Иванoв.

9. Буква Ё.

Если все остальные случаи являются универсальными для любых языков, то этот кейс только для русского языка. Дело в том, что regex просто не знает, что у нас в алфавите есть буква ё. Т.е. если вы напишите регулярное выражение для имени и фамилии не больше, чем 50 символов([А-Я][а-я]{1,49})\ ([А-Я][а-я]{1,49}), то такое выражение не пропустит ни мое имя (Пётр), ни содержащую эту букву фамилию. Поэтому отдельно добавляем ее в регулярки.

Добавляем в регулярки ё для корректной работы.
Добавляем в регулярки ё для корректной работы.

10. Несколько тысяч символов.

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

привет, username,

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

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

11. Транскрипция (слаги).

Чуть в сторону, но думаю будет полезно. Если у вас есть перевод значений в латиницу (например, ФИО для писем за границу), то необходимо использовать единый инструмент создания слагов (человекочитаемые идентификаторы) в проекте. У нас в одном проекте были использованы 2 разных методологии создания слагов на фронте и бэке, и мы долго не понимали в чем проблема. Оказалось, что у нас идет ключевание через слаги, которые сформированы по-разному. Например, слово "транслитерация" в различных системах выглядит вот так: Transliteraciya и Transliteratsiya.

Ну, а теперь ответ на главный вопрос — почему такая обложка поста?

На скрине вы видите SQL-инъекцию. Вы наверное часто встречали это выражение, но не понимали что это по сути.

Так что же такое эта ваша SQL-иньекция? Если совсем просто, то при регистрации под видом имени пользователя вам в БД летит тупо, скорее всего, вредоносный SQL-код. Какой конкретно — неизвестно, но это дыра прямо к вам в БД.

- Как вас зовут? 
- Меня зовут DROP DATABASE base1

И все, вашей базы больше нет. Да, конечно, шанс, что атакующий угадает с названием таблицы, очень мал, но никто не отменял брутфорс и промышленный шпионаж, оставлять такую дыру очень опасно. По защите от инъекций написаны сотни статей и это стандарт в ИБ. Поэтому инъекции, в подавляющем числе случаев можно сделать только тогда, когда разработчик вообще не подозревает, что так можно.

Это было финальным аргументом необходимости вводить регулярные выражения.

Основные выводы:

  1. Меньше европоцентричности. У других культур свои правила составления имен —и это надо учитывать. Либо подгонять под свой формат, но по унифицированым сценариям.

  2. Если можно разделить ФИО на отдельные поля — делите обязательно, это вам значительно упростит жизнь.

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

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

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

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

Комментарии (38)


  1. tempick
    21.11.2021 14:10
    +3

    Всё так хорошо начиналось и неожиданно закончилось) Ожидал почитать не только про ввод имени но и другие интересные нюансы. Но все равно спасибо


    1. Peterlos Автор
      21.11.2021 14:12
      +1

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


      1. tempick
        21.11.2021 16:20

        скорее всего, просто заголовок вводит в заблуждение. Ввод имени и даты — это, всё же, про валидацию данных, а не про регистрацию.


    1. michael_v89
      21.11.2021 19:46
      +3

      Не надо следовать советам из этой статьи. Всю статью можно заменить на один совет — в SQL-запросах используйте именованные параметры. Тогда никакие регулярки для проверки будут не нужны, и не надо будет учитывать 11 нюансов.


  1. aamonster
    21.11.2021 14:14
    +11

    Надеюсь, мне не придётся регистрироваться на сделанных вами сайтах.

    Проблема та же, что с валидаторами e-mail: вы чрезмерно усложняете. Примите уже, что вы не можете сами проверить корректность имени.


    1. Peterlos Автор
      21.11.2021 14:44
      -5

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


      1. sshikov
        21.11.2021 14:47
        +7

        Например, можно вспомнить, что в SQL есть binding variables, которые полноценно предотвращают иньекции, и не париться валидацией того, структуру чего вы все равно не знаете, и узнать не сможете.


        1. Peterlos Автор
          21.11.2021 14:55
          -1

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


          1. sshikov
            21.11.2021 15:02
            +5

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

            >потенциальное залитие мусора в базу
            Согласен, это другая проблема. Но вам не кажется, что наложив ограничения на имя, вы просто получите вместо мусора неструктурированного — мусор по вашим правилам? Ну т.е. будет там везде Иванов Иван Иванович, 01-01-1970 года рождения, номер телефона +7 495-000-00-00, и что вам это дало?


            1. Peterlos Автор
              21.11.2021 17:04
              -1

              1) Это другой бизнес-процесс. Нужен ли тут он, решает бизнес-архитектор. Я лишь пишу, если вы решили сделать валидацию написаного текста, то учтите эти аспекты.

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


              1. sshikov
                21.11.2021 17:16
                +3

                >проще реальные данные дать
                Ну, бывает конечно и так. Но мне кажется далеко не всегда.

                >надо запариваться чтото придумывать
                Да вовсе не надо. Вот же я придумал — даже не напрягаясь. Вы правда верите, что человек глупее регулярного выражения? :)

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

                >дать мотивацию самому писать реальные данные.
                Так я а о чем? Если уж вам сразу хочется реальные — лучше этим и заморачиваться.


                1. Peterlos Автор
                  21.11.2021 17:29

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

                  Так я за это и топлю. И пишу. Но это никак не противорчит тому, что мы должны дыру в бд закрыть и не позволять заливать, например, 100к символов в нее.

                  В некоторых сервисах, если вы уйдете с регистрации лучше, чем вы оставите свои фейковые данные. Все зависит от конкретных кейсов.


      1. aamonster
        21.11.2021 14:59
        +5

        Ну а что, не можешь сделать ничего – хотя бы сломай UX? Так себе решение. По мне, не можешь сделать ничего – не делай ничего.

        Проверить имя-фамилию юзера вы сможете, когда он вам паспорт покажет. Ну или с госуслуг подтянуть, если есть возможность.


  1. Dekmabot
    21.11.2021 14:18
    +4

    Это лишь холмик в горах. При создании авторизации, кроме разделения фио на слова, есть вопросы уникальности учёток, шифрования и хранения паролей и соли, логин или email, восстановление или сброс пароля, подтверждение email, токены, роли и права, параллельные сессии, вход по openid/oauth, локализация и так далее.

    Поэтому если цель "закрыл дело и пошел писать настоящий функционал", на старте проще использовать внешние iam-сервисы.


    1. Peterlos Автор
      21.11.2021 14:46

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


    1. tempick
      21.11.2021 15:53

      Да, именно это я и ожидал вообще увидеть в статье. Или хоть что-нибудь из этого


  1. laatoo
    21.11.2021 14:30
    +13

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


    ВСЁ


    Если на имя будут оформляться документы/доставки итп — пользователь больше вас заинтересован в том, чтобы там не было эмодзи


    1. Peterlos Автор
      21.11.2021 14:47
      -5

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


      1. laatoo
        21.11.2021 14:49
        +9

        Так если пользователь не заинтересован в том чтобы сказать вам свое имя — нечего спрашивать


        1. Peterlos Автор
          21.11.2021 16:56

          Статья лишь про то, что если нужно сделать такую регистрацию, вот как сделать качественно. Если считаете что не нужны реальные данные для бизнес-процесса, то и регистрация не нужна.


          1. tempick
            21.11.2021 19:52

            Справедливости ради, ваши решения никак не мешают вбивать не «реальные данные». Вообще, по моей практике (у меня её не так много, но всё же) проще делать стандартную регистрацию по email(/ник/телефон)+пароль, а остальные поля уже в профиле пользователь по желанию может вбить.
            Если речь про ботов (чисто субъективно — регистрация через ботов — это мне, как пользователю — тот ещё гемор), то там у каждого пользователя в том же телеграме можно получить и имя пользователя в телеграм, и его id.
            Если вы переживаете, что в его профиле указано не настоящее имя, то можно, например, опционально дать возможность указать другое имя, если это так важно. Хотя чаще (опять же, по моей практике) фамилия и имя обычно указываются для удобства самого пользователя и не несут большой смысловой нагрузки для бизнеса (кроме случаев условных доставок, где надо получить посылку по паспорту или гос. контор или букмекерских контор и т.д.)


  1. Chronicler
    21.11.2021 15:27
    +9

    Во-первых, никакой мотивации давать вам свои реальные данные у пользователя нет,
    ...
    У нас есть проблема и нам надо ее решать. Как всегда, нужно использовать кнут и пряник для баланса.

    А не многовато ли вы на себя берете? Если реальной нужды указывать настоящие данные нет, в чем вы признались, то зачем усложнять пользователю жизнь выбивая их? Уж не приторговываете ли вы данными? В общем, посыл отвратителен, отношение неуважительное, ставлю статье минус. Надо больше любить людей!


    1. Peterlos Автор
      21.11.2021 16:54
      -4

      Еще шаг и я Гитлер, смотрю)

      Зачем вам давать свои реальные данные, когда вы берете кредит? Или когда регистрируетесь в каршеринге? Или когда арендуете другие вещи?

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

      Статья о том, если вы хотите сделать регистрацию, то сделайте ее качественной, если не хотите, то можете не делать, никто не заставляет.


  1. Areso
    21.11.2021 15:47
    +1

    Реально полезным и новым знанием для меня оказалась буква ё в регэкспах.


  1. vikarti
    21.11.2021 16:00
    +3

    ФИО тремя полями? https://shinesolutions.com/2018/01/08/falsehoods-programmers-believe-about-names-with-examples/ почитайте
    Или русский перевод более старой версии https://habr.com/ru/post/146901/
    ну и https://www.w3.org/International/questions/qa-personal-names


    Уж проще — одно имя, и не ограничивать вообще никак.


    Если надо доставку почтой делать делать — отдельно набор реквизитов для доставки (не факт человек для себя заказывает), и лучше — не один (у Амазона (в данном контексте — магазина а не AWS) того же же — есть данные об аккаунте, есть данные о способах оплаты, есть данные об адресах доставки (привязанных по умолчанию к способам оплаты).


    Куча сайтов где что то где то покупать — есть данные об имени одной строкой (иногда вообще полученной через Facebook/Google логин), есть платежные реквизиты где имя и адрес вводятся отдельно и к имени единственное требование "как на карте" ).


    1. laatoo
      22.11.2021 08:48
      +1

      Моё любимое — когда от тебя в обязательном порядке требуют полный набор данных, начиная с ФИО, заканчивая рабочим телефоном и почтовым индексом, для получения цирового товара, который тебе пришлют по электронной почте/дадут ссылку на скачивание в личном кабинете.


      Обычно это сопровождается безумными регулярками, которые не пропускают домены 3 уровня в email'е, select'ами с выбором страны и региона, экзотическими требованиями к паролю итд итп. Уверен, в подобной базе данных примерно все поля заполнены всеми возможными whocares'ами и fuckoff'ами, и единственное поле, которое заполнено реальными данными — email (и тот, скорее всего, одноразовый)


      Ну хотя нет, не единственное. Ещё почтовый индекс, вот он совершенно точно соответствует указанному региону, ведь без него форма не отправится!


      P.S: за ссылку на w3 спасибо, интересно


      1. vikarti
        22.11.2021 09:33
        +2

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


        Но вот только процедура заполнения анкеты была ну очень удобной и прямо в темах на хабре ссылки на cloud.mail.ru, amazon s3 и dropbox
        (https://habr.com/ru/post/259505/ https://habr.com/ru/post/306982/ )


  1. yarkov
    21.11.2021 16:12

    image
    Ну и как же без классической пикчи ))


  1. v1a0
    21.11.2021 16:50

    А что делать с символьным мусором? По типу:

    ????꙰꙰꙰꙰꙰꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰꙰

    Логично его просто как-то фильтровать или заменять на что-то типа "???", особенно если сохраняете в БД ники пользователей. Телеграм все ещё позволяет напихать в них такого мусора, что может заслонять сообщения других пользователей в группах.

    ФАКТ!
    Если вставите текст выше в окно комментария, даже хабр поплывет!


    1. Peterlos Автор
      21.11.2021 17:07
      -1

      Это контриться ограничением на длинну поля. И прочими регулярками.


  1. Peterlos Автор
    21.11.2021 17:46
    -2

    На меня тут напали, что такая регистрация вообще не нужна.

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

    Мы писали бота, который автоматически формирует документы для работы. Он был предбанником CRM, люди не привыкли к такой системе и писали, например, ники или уменьшительно-ласкательные имена. И да, мы писали плашки как надо писать. Но все равно приходилось фиксить ошибки в уже сформированных доках.

    И после введения всех перечисленных правил, пользователи начали писать все корректно и документы начали формироваться нормально.

    Если вы считаете, что можно в поля писать все что угодно, пожалуйста, это просто другой подход, не лучше и не хуже.


    1. Areso
      21.11.2021 19:03
      +2

      Есть "счастливчики" кого прямо в паспорт записали по уменьшительно-ласкательному имени (когда совпали звезды, и в роддоме был пьяный отец и пьяный же писарь). Например, Танька Иванова (ну, случается, чё) или Танюшка Стрелкова. Окей, вот приходит такой человек, пытается зарегаться в сервисе, а ему строгий бот отвечает: "нельзя так писать, пишите как в паспорте!". И дальше что делать? Искать поддержку, которая, внезапно, почти такой же бот в том же телеграме и начнёт с того же требования?)

      Да, в большинстве случаев вы повысите качество данных, но в каком-то проценте случаев вы просто убьёте не совсем стандартных пользователей.


      1. Peterlos Автор
        21.11.2021 21:30

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


        1. Areso
          21.11.2021 22:12

          Принимается


  1. Matshishkapeu
    21.11.2021 18:06
    +8

    У таких навязчивых люителей аналитики из разряда "пройдите три экрана регистрации чтобы скачать файл" большая доля аналитиики выглядит так

    пользователь: Fuck Off

    дата рождения: 01.01.1900

    e-mail ( действительный мы отправим запрос на подтверждение !!!111) : fuck.off@mailinator.com


  1. Fafhrd
    21.11.2021 20:15

    Интересно теперь, как у вас организована работа с паролями.


  1. TITnet
    21.11.2021 23:09
    +1

    Вы описали только работу с именем.

    Её можно сильно упростить.

    Два поля. Имя для документов и Имя для обращения к пользователю.

    Имя для документов: Сергей Сергеевич Сергеев (как в паспорте)

    Имя для обращения в письмах: Серёжа (да, я хочу, чтобы ко мне неформально обращались Серёжа.

    Не нужно пытаться делить имя на составные части (ФИО).


  1. Areso
    22.11.2021 18:59
    +1

    Кстати, из свежего негативного опыта - Яндекс.Маркет требует ФИО кириллицей. Как быть тем пользователям, у кого документы, кхм, на латинице?)