"PHP" / Говнокод #18786 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 kindofbear, (Updated )

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

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

      Тут гораздо забавней, что этот генератор может сгенерить где-то 2-4ккк гуидов. А то и меньше. Т.е. где-то в районе 64к сгенерённых гуидов вероятность коллизии будет аж 1/2... Интересно, код уже налетел на коллизию? 🙂
      Ответить
        • Ты про 2-4ккк? Емнип, генератор у пыхи говно линейно-конгруэнтное с 32-битным стейтом.
          Ответить
            • Это питухи славятся знанием ключиков и параметров конфигов вместо принципов работы, пидор. Недавно на кабре в топе висела статья про фильтрацию https сквидом, где автор на вопрос возможно ли то-то и почему писал "надо маны читать" вместо того чтобы хотя бы заглянуть варешарком в протокол.
              Ответить
              • Ну он тащемта всё правильно сказал. Чтобы узнать, умеет ли squid в MITM, надо почитать маны. Какой смысл что-то там в пакетах рассматривать, если итог и так понятен?
                Ответить
                • Там был скорее вопрос возможно ли это теоретически. Т.е. человек знает только конфиги и не имеет представления когда и где в 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 только при создании сервера (может быть, даже записывать его в конфиг конкретной копии сервера при развёртывании), а не шпарить запросы каждый раз, когда понадобился уникальный идентификатор.
                            Ответить
                              • Впрочем, он все равно в виде автоинкремента в БД не реализован нигде, насколько понимаю, поэтому опять-таки надо делать вручную. И еще очень осторожно вводить новые инстансы.
                                Ответить
                            • Ну есть такой способ. Идентификатор фактически состоит из двух половинок - айдишка сгенерившего и айдишка записи. Те же 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.
              Ответить
      • >ты где-нибудь видел, чтобы хоть какая-то прога/либа пыталась осмысленно парсить гуид, а не тупо юзать его как уникальный блоб?
        а ты видел где-то, чтобы у кого-то кроме Microsoft был тип данных Guid? (:
        Ответить
        • > у кого-то кроме Microsoft был тип данных Guid?
          У остальных он просто называется UUID, структура та же.
          Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8