За последние 24 часа нас посетил 17601 программист и 1720 роботов. Сейчас ищут 1863 программиста ...

Разрешать ли спец.символы в имени акканутов?

Тема в разделе "PHP для новичков", создана пользователем Walk, 14 мар 2018.

  1. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Здравствуйте

    Делаю валидацию для имени пользователя при регистрации. Изначально запретил любые спецсимволы:

    PHP:
    1.         if (preg_match("/[\||\'|\<|\>|\[|\]|\"|\!|\?|\$|\@|\#|\%|\^|\/|\\\|\&|\~|\*|\{|\}|\+|\_|\:|\.|\,|\;|\`|\=|\(|\)|\§|\°]/", $account))
    2.         {
    3.             return false;
    4.         }
    Но, задумался над тем, что хорошо бы дать пользователям вставлять различные html символы, которые на игровых ресурсах особенно любят - всякие там †Vampire† или ♣♣♣Vasya♣♣♣
    Понятно, что это понты - но вокруг них многое и крутится в играх)

    Для их добавления, нужно разрешить использовать всего два символа: & и ;

    Но есть ли у этих html символов в логине какие-то подводные камни? Возможно кто-то сталкивался.
     
  2. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Вот прикол... я думал спецсимволы, если их вставить иконкой ♣ преобразуются в код:
    Код (Text):
    1. &clubs;
    2. &#9827;
    а оказалось, что нет - и проверка на спецсимволы их успешно пропускает...

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

    Впрочем, вопрос все равно остается открытым - нормально ли разрешать спецсимволы в логине, или у них есть какие-то недостатки/подводные камни.
     
  3. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    [a-zA-Z0-9_]
    Не морочьте себе голову.
     
    keren нравится это.
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    не морочь себе голову \w )
     
    Danil005 и glorsh66 нравится это.
  5. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Кстати тоже присоединяюсь к вопросу_)
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Предложу хранить два варианта: как пользователь ввёл и "канонический", очищенный от мусора.

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

    Alex
    -=Alex=-
    ♣ a l e x ♣

    по сути являются одним и тем же именем "alex" и сортировать лучше по каноническому варианту, а может быть вообще запрещать неуникальные канонические имена.
     
    Fell-x27, Walk и glorsh66 нравится это.
  7. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Спасибо кстати за хорошую идею!
    Что можно так грамотно сортировку делать!
     
  8. Polli

    Polli Новичок

    С нами с:
    12 сен 2017
    Сообщения:
    13
    Симпатии:
    11
    Это unicode символы, проблемы могут быть, если менять кодировку. Так, на utf-8, всякие ♣ воспринимаются как обычные символы.
    Если у вас (внезапно) в базе будет храниться информация в windows-1251, то вполне могут начаться косяки и проблемы. Правда, если у вас сайт и база живут в разных кодировках - у вас уже проблемы :D
     
    Fell-x27 и Walk нравится это.
  9. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Спасибо за идею

    Подумал, что нужно делать вообще три поля:
    Логин - используется только для логина, не отображается на сайте, доступны только ("/^[a-zA-Z0-9а-яА-ЯёЁ\-_]*$/")
    Имя пользователя - доступны буквы и html-спецсимволы, отображается на сайте
    Каноническое имя пользователя - удаляются спецсимволы, поле используется для сортировки

    P.S. Существует множество способов делать копии ников - например Вася/Вaся - в первом случае используется а русская, во втором - английская.

    Борьба с клонами - это отдельная большая тема - что считать клонами, кого банить, кого нет...
     
    glorsh66 нравится это.
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    а я хочу ник с плэйбой зайкой !
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Не надо забывать про A̴̧̨̡̨̨̛̛̤̖̖͚̱͕͔̹̬͇̪̦̘̖̳̰͇̳͙͍͎̻̪̤̖̱͚̜̩̩̳̼̰̤̬̘͙̼̰͇̟̣̰̦̖̤̰͍͔̼̖̹̻̗̱̱̺̗͚̼̖̺͕͐̀̾̍̀̍̄̄͗͊͂̂̂̀̐̈́̇͑̍̈́͂͗̿̾̀̒̍͊̉̾́͂̈́͒̈́̆͐̌͒͛̆̂͌͋͆̎̊̿̾̀̎̀̋͗̌̽͒͊̚̕͜͜͜͜͜͝͝͝͝͝ͅͅͅl̶̡̢̛̛͔͔̟̫̤̫͇̻̱̙͉̺̹͚͔̪͕͔̙̦̟͓̳̩̻̼̽̽̍̄̓̅̇̈́̈́̌́͗̒̄́̏̓̓̏̈̒̀̎͗͌̀̎͑̏̿̊̓̀́̀̍̈́̀̏͂̀͗͛̀̇̓̀͌̓̏̑̔̑̀̈́͊͌͗͐͂̓̔̔̉͝ͅͅȩ̸̧̛̪͚̟̻͇͍̻̜͕̹̭̐͑̇͆̊̈́̀̏̒̈́̊̈́̿̅͐͛̅̾̇̎͌̂̃͊̈́̀̔͆̋̈́͗̇̐̈́͂̆͊̇̾̿̔̃̒́̈͊̅̓͌̀̾̿̂̃͑͑̕̕̚̕͘͜͝͝͝͠͝ͅx̴̣͔̰̞̳͓̮͖͖̤͍̦͈͎̝̠̝͓͖̫͓͙̮̙̥̻͙̖̳̟̭̤̿͋̂̈́̾̈́̉̅̎͐̽͌͒͊͊̽̉̉͛̉̿̉̐͊̽̈́́́͂̐͂̓͑͆̑͌͆̕̚̕͜͜͠ͅͅ
     
    keren и Polli нравится это.
  12. Polli

    Polli Новичок

    С нами с:
    12 сен 2017
    Сообщения:
    13
    Симпатии:
    11
    Ай, действительно забыли :) Ох уж этот zalgo.
    Эти пакостные символы должны находиться в промежутке #x0300-#x036f. Но preg_match("/[#x0300-#x036f]/") дает ошибку
    Код (Text):
    1. Warning: preg_match(): Compilation failed: range out of order in character class at offset 8
    Зараза. Похоже, не может понять, как тут от и до считать. Ладно. Путем экспериментов было выявлено, что вот это:
    PHP:
    1. preg_match("/[#x030e]/", $account)
    позволяет отловить как символы над символом (t̓ë́ͬ̇ͦ̄ͨs̄̔t̎ͩͤ̉̉̅ͥ), так и под (t̝̥͇̣e̩s͙͚̞͚t̹) и на (t́e̸͢s̶̢t͟͜). То есть, все 3 возможных типа символов. Я не особо много игралась с такой проверкой. И вообще я за белый лист потому что ибо нефиг :D

    Есть еще вариант - как-то ограничить это безобразие через дизайн. То есть можно написать какое-то безобразие вместо ника, но дизайн страницы от этого никуда не поедет.
     
    Walk нравится это.
  13. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Делать свойство:
    overflow: hidden

    В ячейке, в которой находится имя. Даже если пользователь придумает что-то громоздкое - все, что будет выходить за рамки отведенного поля будет скрываться.
     
    artoodetoo и Polli нравится это.
  14. Polli

    Polli Новичок

    С нами с:
    12 сен 2017
    Сообщения:
    13
    Симпатии:
    11
    Я бы все равно запретила. А то что это за безобразие такое, не ник, а помойка!
     
    Алекс8, MouseZver и glorsh66 нравится это.
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    У нас на форуме Девушка появилась с мозгами!!!!!!!!!!! Боги микрокодинга услышали мою сирену :eek:
    --- Добавлено ---
    улыбка судьбы:
    [​IMG]
    https://php.ru/forum/members/hacker_farid.65254/
    --- Добавлено ---
    не верный ответ
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Когда ж закончатся эти "вылейте литр абсента в тазик, затем накрошите туда свежих мухоморов, сожрите что получилось и тогда вы сможете придумать логин и пароль под наши правила". А то вдруг непонятная закорючка взломает нашу базу и удалил сайт. хех ))
     
    Fell-x27 нравится это.
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на лепре так
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Walk
    Как ранее мне советовали на форуме, не каких ограничений для ника не должно быть, самое главное правильно работать потом с ними.
     
  19. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Уже писал где то.
    dd(transliterator_transliterate('ASCII; Latin; ASCII;', 'A̴̧̨̡̨̨̛̛̤̖̖͚̱͕͔̹̬͇̪̦̘̖̳̰͇̳͙͍͎̻̪̤̖̱͚̜̩̩̳̼̰̤̬̘͙̼̰͇̟̣̰̦̖̤̰͍͔̼̖̹̻̗̱̱̺̗͚̼̖̺͕͐̀̾̍̀̍̄̄͗͊͂̂̂̀̐̈́̇͑̍̈́͂͗̿̾̀̒̍͊̉̾́͂̈́͒̈́̆͐̌͒͛̆̂͌͋͆̎̊̿̾̀̎̀̋͗̌̽͒͊̚̕͜͜͜͜͜͝͝͝͝͝ͅͅͅl̶̡̢̛̛͔͔̟̫̤̫͇̻̱̙͉̺̹͚͔̪͕͔̙̦̟͓̳̩̻̼̽̽̍̄̓̅̇̈́̈́̌́͗̒̄́̏̓̓̏̈̒̀̎͗͌̀̎͑̏̿̊̓̀́̀̍̈́̀̏͂̀͗͛̀̇̓̀͌̓̏̑̔̑̀̈́͊͌͗͐͂̓̔̔̉͝ͅͅȩ̸̧̛̪͚̟̻͇͍̻̜͕̹̭̐͑̇͆̊̈́̀̏̒̈́̊̈́̿̅͐͛̅̾̇̎͌̂̃͊̈́̀̔͆̋̈́͗̇̐̈́͂̆͊̇̾̿̔̃̒́̈͊̅̓͌̀̾̿̂̃͑͑̕̕̚̕͘͜͝͝͝͠͝ͅx̴̣͔̰̞̳͓̮͖͖̤͍̦͈͎̝̠̝͓͖̫͓͙̮̙̥̻͙̖̳̟̭̤̿͋̂̈́̾̈́̉̅̎͐̽͌͒͊͊̽̉̉͛̉̿̉̐͊̽̈́́́͂̐͂̓͑͆̑͌͆̕̚̕͜͜͠ͅͅ')); вернет Alex. Плюс с китайскими иероглифами поможет
     
  20. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    и будешь пихать эту функцию везде для вывода читабельного ника, равноценно ограничение ( Only a-Z_ )
     
  21. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Зачем? Пользователь что то ввел. Ты сохранил два значения. И в нужных местах на выбор вставляешь.
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я бы запретил пробельные символы и перевод строки, и усё, пожалуй хватит.
     
  23. Walk

    Walk Активный пользователь

    С нами с:
    7 сен 2008
    Сообщения:
    452
    Симпатии:
    86
    Почему? Много где именно так и делают.
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тогда достаточно мыла на вход и можно любое имя фигарить.
     
  25. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    вот именно что не везде