1. PHP / Говнокод #18786

    +7

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    $guid = @sprintf("%X%X%X%X%X%X%X%X-%X%X%X%X-%X%X%X%X-%X%X%X%X-%X%X%X%X%X%X%X%X%X%X%X%X",
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16,
    				@rand() % 16);

    Запостил: kindofbear, 30 Сентября 2015

    Комментарии (64) RSS

    • а там разве 4ка не должна быть?
      Ответить
      • Мопед не мой. Возможно, этот кусок кода вообще мёртвый и не работает
        Ответить
      • Ну формально должна... Но ты где-нибудь видел, чтобы хоть какая-то прога/либа пыталась осмысленно парсить гуид, а не тупо юзать его как уникальный блоб?

        Тут гораздо забавней, что этот генератор может сгенерить где-то 2-4ккк гуидов. А то и меньше. Т.е. где-то в районе 64к сгенерённых гуидов вероятность коллизии будет аж 1/2... Интересно, код уже налетел на коллизию? :)
        Ответить
        • Эт почему?
          Ответить
          • Ты про 2-4ккк? Емнип, генератор у пыхи говно линейно-конгруэнтное с 32-битным стейтом.
            Ответить
            • Пидар наверняка слов-то таких не знает.
              Ответить
              • Ну он вроде в криптографии шарит. Должен знать.
                Ответить
              • Это питухи славятся знанием ключиков и параметров конфигов вместо принципов работы, пидор. Недавно на кабре в топе висела статья про фильтрацию https сквидом, где автор на вопрос возможно ли то-то и почему писал "надо маны читать" вместо того чтобы хотя бы заглянуть варешарком в протокол.
                Ответить
                • Ну он тащемта всё правильно сказал. Чтобы узнать, умеет ли squid в MITM, надо почитать маны. Какой смысл что-то там в пакетах рассматривать, если итог и так понятен?
                  Ответить
                  • P.S. Или там вопрос не про это был? Кинь статью.
                    Ответить
                  • Там был скорее вопрос возможно ли это теоретически. Т.е. человек знает только конфиги и не имеет представления когда и где в TLS вообще передается домен.

                    >если итог и так понятен
                    Если ты про то что все зашифровано - это не так. Серт не зашифрован, а в нем dns.Есть еще sni.
                    Ответить
                    • > Серт не зашифрован, а в нем dns.Есть еще sni.
                      Ну это только домен выдаст. Или автору этого и дсотаточно?
                      Ответить
                      • Автор этого не знал и вместо этого предлагал читать маны. Я непонятно выражаюсь?
                        Ответить
                • >Это питухи славятся знанием ключиков и параметров конфигов вместо принципов работы, пидор.
                  3_14dar, читай маны, пидор.
                  Ответить
            • Что есть ккк? Т.е. максимальное количество комбинаций - 2**32? Тоже вобщемто немало.
              Ответить
              • к - 1000, кк - 1 000 000, ккк - 1 000 000 000. Не помню откуда я про эти суффиксы узнал, но вроде они довольно известны в инете...

                > Тоже вобщемто немало.
                Очень мало. Теорему о днях рождения вспомни. Там коллизии попрут уже в районе десятков тысяч "гуидов".
                Ответить
                • Для этих целей придумали приставки СИ или экспоненциальную форму записи.

                  > Там коллизии попрут уже в районе десятков тысяч "гуидов".
                  Вроде немало.
                  Ответить
                  • > Вроде немало.
                    Ну смотря где и для чего эти гуиды нужны. Если нахуй никому не нужный говносайт - там, конечно, за годы не наберётся. А в более популярных и за день эти 65к намотает.
                    Ответить
                    • И кому они нужны и зачем?
                      Ответить
                      • Ну в ынтырпрайзе гуиды частенько юзают в качестве ключей в БД. У пыхомакак такое реже, но вроде тоже встречается.
                        Ответить
                      • google: шардинг (горизонтальное масштабирование)

                        У сайтов с огромным числом пользователей БД может быть разнесена по нескольким серверам. При регистрации нового объекта (пользователя, записи блога и т. п.) нужно быть уверенным, что айдишник, сгенерированный данным филиалом базы, отсутствует в других филиалах. Если мы каждый раз будем опрашивать все сервера, по которым распределена база, то потеряем пирфоманс. А гуид даёт каковско-никаковскую уверенность, что айдишник можно сгенерировать от балды и не нарваться на коллизию.
                        Ответить
                        • Почему не завести сервис который будет выдавать уникальные ID для всех серверов?
                          Ответить
                          • Потому что сделать сервис, который делает это шустро и при этом работает 24/7, не так уж и просто. При этом увеличивается latency на каждую вставку. Решение с GUID гораздо проще.
                            Ответить
                            • Можно выдать ограничение на N уникальных ID для одного зарегистрированного пользователя, чтобы приучить всех брать ID только при создании сервера (может быть, даже записывать его в конфиг конкретной копии сервера при развёртывании), а не шпарить запросы каждый раз, когда понадобился уникальный идентификатор.
                              Ответить
                              • (token distribution)
                                Ответить
                                • Впрочем, он все равно в виде автоинкремента в БД не реализован нигде, насколько понимаю, поэтому опять-таки надо делать вручную. И еще очень осторожно вводить новые инстансы.
                                  Ответить
                              • Ну есть такой способ. Идентификатор фактически состоит из двух половинок - айдишка сгенерившего и айдишка записи. Те же MAC адреса или айдишки USB устройств именно так и устроены.

                                Либо как делают некоторые СУБД с автоинкрементом - атомарно забирают сразу пачку номеров и раздают их из памяти. При краше вся эта пачка потеряется, но худшее что случится - просто дырки в нумерации, отсутствие которых и без этого не гарантируется.
                                Ответить
                              • P.S. Ну и GUID/UUID version 1 похож на твою схему - там он строился из MAC адреса компа и времени. Выдача уникального ID для пользователя унесена на момент изготовления сетевухи ;)
                                Ответить
                          • Единая точка отказа = говно.
                            Ответить
                  • >Для этих целей придумали приставки СИ или экспоненциальную форму записи.
                    10ккк = ((10к)к)к, по-моему все логично.
                    Ответить
                    • ККК — это Ку-клукс-клан или Kirche, Küche, Kinder.

                      3_14dar прав: кратные и дольные приставки не комбинируют, приставка должна быть одна. Вместо килокиловольт проще сказать мегавольт.
                      Ответить
                      • Я и не говорю, что их официально можно комбинировать. ккк - довольно распространенная "неофициальная" приставка, видимо, потому что "к" и "М" знают многие, а "Г" уже не так интуитивна.
                        Ответить
                        • >довольно распространенная "неофициальная" приставка
                          Видимо, мы по разным местам шастаем

                          >"Г" уже не так интуитивна.
                          Што? Уже и тера знают.
                          Ответить
                          • >Видимо, мы по разным местам шастаем
                            Наверное.

                            >Што? Уже и тера знают.
                            >>Видимо, мы по разным местам шастаем
                            Ответить
        • Да, но не забывай, что такие говнокодики обычно работают на "умирающем" PHP (который mod_php или подобное), а новый HTTP Request вызовет (?) srand с новым сидом (время в микросекундах).
          Ответить
          • Ну т.е. вероятность коллизии ещё больше чем я оценил выше? ;)
            Ответить
          • Но ведь можно результат rand писать в файл / в базу / в мемкеш, а в следующем запросе делать srand с этим значением.
            Ответить
            • Вряд ли макака, которая писала этот ГК, могла додуматься до такого.
              Ответить
              • Я тут подумал: а ведь за промежуток времени между вызовом нового srand и ближайшего rand может пройти другой запрос (на сервере несколько потоков пхп могут работать параллельно), тогда два процесса выдадут одинаковый результат. Значит, нужно расставлять семафоры, чтобы вызов srand в данном процессе откладывался до момента, когда во всех других процессах отработает rand.
                Ответить
                • P.S. В идеале, конечно же, нужно разработать неблокирующий алгоритм...
                  Ответить
                  • может проще юзать нормальный рендом?
                    Ответить
                    • Какой рэндом для PHP будет нормальным?
                      Ответить
                      • Я ебу? Все идите напитон, пидары!
                        Ответить
                        • В Питоне рэндом сохраняет сид между запросами?
                          Ответить
                          • В питоне есть криптографический рендом.
                            Ответить
                            • То есть требовательные к криптографии веб-сайты можно смело переводить напитон?
                              Ответить
                              • >требовательные к криптографии
                                Ты понимаешь что такое криптографический рендом и какое он отношение имеет к криптографии?
                                Ответить
                    • 3_14dar, иди в/dev/random, пидар!
                      Ответить
        • >ты где-нибудь видел, чтобы хоть какая-то прога/либа пыталась осмысленно парсить гуид, а не тупо юзать его как уникальный блоб?
          а ты видел где-то, чтобы у кого-то кроме Microsoft был тип данных Guid? (:
          Ответить
          • > у кого-то кроме Microsoft был тип данных Guid?
            У остальных он просто называется UUID, структура та же.
            Ответить
          • Конечно, ни у кого больше нет GUID, ведь у всех остальных UUID!
            Ответить
    • так вот как оно работает
      Ответить
    • Спасибо, ржал как конь.
      Ответить
    • WHOOO LET THE DOGZ OUT
      Ответить

    Добавить комментарий