1. Си / Говнокод #26767

    +1

    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
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    // https://habr.com/ru/company/oleg-bunin/blog/493242/
    // Алгоритмы быстрой обработки HTTP-строк 
    
    // .....
    
    // Как устроен парсер? Мы, как nginx, определяем массив байт и по нему
    // проверяем входные данные — это пролог функции. Здесь мы работаем
    // только с короткими сроками, используем likely, потому что branch misprediction
    // для коротких строк болезненнее, чем для длинных. Выносим этот код наверх.
    // У нас есть ограничение в 4 из-за последней строчки — мы должны написать
    // достаточно мощное условие. Если будем обрабатывать больше 4 байт, то условие
    // будет тяжелее, а код медленнее.
    
    static const unsigned char uri_a[] __attribute__((aligned(64))) = {
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            ...
            // Branch misprediction is more crucial for short strings
            if (likely(len <= 4)) {
                    switch (len) {
                    case 0:
                        return 0;
                    case 4:
                        c3 = uri_a[s[3]];
                        // fall through to process other chars
                    case 3:
                        c2 = uri_a[s[2]];
                    case 2:
                        c1 = uri_a[s[1]];
                    case 1:
                        c0 = uri_a[s[0]];
                    }
                    return (c0 & c1) == 0 ? c0 : 2 + (c2 ? c2 + c3 : 0);
            }
    
    
    // Основная петля и большой хвост. В основном цикле обработки мы делим
    // данные: если они достаточно длинные, обрабатываем по 128, 64, 32 или
    //  по 16 байт. Имеет смысл обрабатывать по 128: мы параллельно используем
    // несколько каналов процессора (несколько pipeline) и суперскалярность процессора.
    
    for ( ; unlikely(s + 128 <= end); s += 128) {
            n = match_symbols_mask128_c(__C.URI_BM, s);
            if (n < 128)
                    return s - (unsigned char *)str + n;
    }
    
    if (unlikely(s + 64 <= end)) {
            n = match_symbols_mask64_c(__C.URI_BM, s);
            if (n < 64)
                    return s - (unsigned char *)str + n;
            s += 64;
    }
    
    if (unlikely(s + 32 <= end)) {
            n = match_symbols_mask32_c(__C.URI_BM, s);
            if (n < 32)
                    return s - (unsigned char *)str + n;
            s += 32;
    }
    
    if (unlikely(s + 16 <= end)) {
            n = match_symbols_mask16_c(__C.URI_BM128, s);
            if (n < 16)
                    return s - (unsigned char *)str + n;
            s += 16;
    }

    ... пиздец. Там еще в той статье пишут, что CloudFlare через AVX2 какое-то говно оптимизируют в говнопаринге http запросов.

    Поэтому я за бинарную сериализацию, без всей этой хуйни человекочитаемой

    Запостил: j123123, 23 Июня 2020

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

    • > Nginx использует алгоритм, который работает за два прохода: сначала ищет длину, потом проверяет. На первом шаге он сканирует строку на токены, ищет первый токен («пробный»). На втором — токенизирует, проверяет конец запроса (Get) и запускает switch, по размеру токена.

      for (p = b->pos; p < b->last; p++) {
          ...
          switch (state) {
          ...
          case sw_method:
              if (ch == ' ') {
                  m = r->request_start;
                  switch (p - m) {         // switch on token length!
                  case 3:
                      if (ngx_str3_cmp(m, 'G', 'E', 'T', ' ')) {
                      ...
                  }
                  if ((ch < 'A' || ch > 'Z') && ch != '_' && ch != '-')
                      return NGX_HTTP_PARSE_INVALID_METHOD;
                  break;
          ...



      ... вообще, вспоминается еще вот эта параша https://govnokod.ru/24338 - там тоже какая-то такая поебень
      else if (ngx_auth_digest_str5_casecmp(start, 'n', 'o', 'n', 'c', 'e'))


      Или вот https://govnokod.ru/19842 там вконтактовские олимпиадники свою питушню на длину проверяют, и только потом сравнивают
      if (D->wlen == 3 && !memcmp (D->word, "GET", 3))

      или вот
      else if (D->wlen == 10 && !strncasecmp (D->word, "connection", 10))

      Это лишь тупые анскиллябры опускаются до макросов, а Доктора Наук умеют сами считать размер строк
      Ответить
      • А там ещё благодаря текстовости HTTP при зожатии его всякими SPDY и шифровке HTTPS повылазили разного рода уязвимости.

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

        Вообще все эти SPDY и HTTP/2 с их словарным зожатием зоголовков, по сути откат к бинарным протоколам.

        Царь мудр. А птушники колются, но продолжают дрочить на текстовую питушню.
        Ответить
        • > упрощалась дешифровка SSL

          Если SSL TLS не похуй на контент и при каких-то данных он становится слабее - то это всё-таки TLS хуёво спроектирован, а не прикладной протокол, который поверх него гоняют.
          Ответить
          • З.Ы. А вообще, браузеры - это цирк какой-то с точки зрения безопасности. Мало того, что они исполняют недоверенный код, так они ещё и разрешают ему кидать произвольные запросы куда угодно, а потом просто прячут от него ответ если вдруг нельзя было.

            Как в таких ебанутых условиях вообще удаётся сделать что-то малость безопасное - х.з.
            Ответить
            • Подтверждаю. Это вообще распространённая забава (была) на всяческих форумах и прочих местах скопления людей: кидать ссылку на картинку, сервер которой схороняет данные всех запросов. В особо запущенных случаях можно было вставлять такие картинки-шпионы в подпись или даже аватар. См. «2IP шпион».
              В коммерции, кстати, используется такая же хуйня, но в более извращённых и тёмных формах, см. «pixel tag».
              Ответить
              • Кукарекали, кукарекали да невыкукарекали.
                Ко-кок, ко-кок.
                Ответить
            • >Rizzo and Duong presented CRIME as a general attack that works effectively against a large number of protocols, including but not limited to SPDY (which always compresses request headers), TLS (which may compress records) and HTTP (which may compress responses).

              Просто сначала анскилябры сделали HTTP текстовым протоколом.

              Время шло, траффик рос, все стали видеть реальный пирформанс и осознавать масштабы факапа.

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

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

              И что в итоге вышло? Всё что было заявлено — со всем обосрались.

              Кукарекали, что-то про читабельность текста — обосрались и начали архивировать.

              Кукарекали, что бинарь не нужен, а сами сделали уязвимый бинарь.
              Ответить
            • >произвольные запросы куда угодно,
              есть же заголовок, запрещающий с этого сайта слать запросы
              Ответить
              • Как называется?
                Ответить
                • https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
                  Ответить
                  • Ну и как оно запрещает мне отправлять что угодно куда угодно? Да, если сильно выёбываться с хедерами, то можно нарваться на pre-flight проверку и реальный запрос до сервака не дойдёт. Да, ответ от меня спрячут.

                    Но обычный "безобидный" GET или POST вполне доходит до сервера. Чего в общем-то и было достаточно для обсуждаемых здесь атак.
                    Ответить
                    • Если на твоем сайте расположен файл foo.js, то при этом заголовке он не сможет пойти аджаксом на другой домен.
                      Ответить
                      • Oh, sweet summer child...

                        Сходи, проверь уже. Даже ваершарк запускать не надо, браузерной сосноли будет достаточно. Кинь кросс-доменный запрос с какого-нибудь ГК на какое-нибудь ВК и убедись, что браузер и сервер этот запрос обработали, а твоему скрипту просто ответ не отдали.

                        З.Ы. Ну что, фаза отрицания пройдена? :)
                        Ответить
                        • У ГК прописан CORs? Ты точно смотрел ссылку?

                          Разумеется, ничего никуда браузер не кидает
                          Ответить
                          • CORS прописывают на том сайте, к которому идёт обращение. И, очевидно, что браузер узнает о нём только кинув запрос и получив ответ.
                            Ответить
                            • Речь шла о CSP, а CORS здесь и павда ни к месту

                              https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
                              Ответить
                              • Слив уже защитан.
                                Ответить
                                • A web site administrator wants all content to come from the site's own origin (this excludes subdomains.)

                                  Content-Security-Policy: default-src 'self'
                                  Ответить
                                  • Ну да, ты как админ включаешь CSP и запрещаешь своему домену ходить на другие за всяким говном. Также ты как админ выставляешь CORS и запрещаешь другим доменам читать ответы твоего сервера (или не выставляешь, по дефолту там и так запрет).

                                    При этом злоумышленник на его домене вправе разрешить его скриптам ходить на твой домен. Браузер даже куки будет отправлять. Чего вполне достаточно для рассматриваемых в данном треде атак. А то что его скрипт ответ не получит - всем похуй.
                                    Ответить
                                    • злоумышленник на его домене может вообще что угодно делать, хоть вирусы распостранять

                                      причм тут HTTP?
                                      Ответить
                              • Про CSP тоже ниже обсудили. Он совершенно от другого защищает.

                                Если злоумышленник хочет отправлять запросы от имени своего домена куда угодно, то CSP ему никак не помешает.
                                Ответить
                                • >Про CSP тоже ниже обсуд
                                  где?

                                  Как я могу вставить пиксель с урлом на мой сайт на чужом форуме при csp?

                                  >запросы от имени своего домена
                                  эмм
                                  ну да.
                                  Я могу что угодно на своем сайте делать.

                                  А еще я могу что угодно слать от своего IP. Это проблема?
                                  Ответить
                                  • Злоумышленник — это владелец сайта.
                                    Ответить
                                    • объяните пожалуйста как злоумышленник -- владелец сайта -- может принести вред
                                      Ответить
                                      • Юзер заходит на сайт злоумышленника. Злоумышленник может вынудить браузер кидать специально сформированные запросы к твоему сайту. При этом браузер будет отправлять куки юзера. За счёт неудачно реализованного сжатия в HTTP/2 эти куки будут влиять на длину TLS пакета. И если злоумышленние сможет увидеть длину TLS пакета - то он узнает куки от твоего сайта. Как-то так.

                                        При этом ты, как админ сайта, вообще ничего не можешь сделать. Разве что отрубить HTTP/2.
                                        Ответить
                                        • как злоумышленник уведит длинну пакета, посланного на другой домен?
                                          Ответить
                                          • > увидит длину пакета

                                            Ты в кафешках, метро и т.п. вайфаем пользуешься?
                                            Ответить
                                            • и что? wpa2 сломали уже?

                                              или злоумышленник это админ роутера? если админ, то почему бы ему просто не открывать vk.com в качестве портала?
                                              Ответить
                                          • https://en.wikipedia.org/wiki/Man-in-the-middle_attack
                                            Ответить
                                            • как админ сайта может сделать man in the middle?

                                              роутер сломает?
                                              Ответить
                                              • g: «intercepter-ng».
                                                Ответить
                                                • и что? как это сломает wpa2?
                                                  и если сломает, то зачем такие сложности как http2, почему просто не открыть vk.com?
                                                  Ответить
                                                  • > почему просто не открыть vk.com?
                                                    Задача — спиздить куки пользователя от сайта vk.com. «vk.com» открывается только по «https».
                                                    Ответить
                                      • Вредоносный сайт, с питушнёй, которая ходит на интернет-банкинг или чьё-то вк.

                                        Браузер идёт запросом в вк, злоумышленник снифает куки.
                                        Ответить
                                        • >Браузер идёт запросом в вк, злоумышленник снифает куки.


                                          как? я админ сайта example.org, что я должен сделать, чтобы спиздить куки с ВК?
                                          Ответить
                                          • 1) Поднять бесплатный вайфай
                                            2) Уговорить юзера зайти на твой сайт (это очень просто т.к. бесплатный вайфай обычно открывает страничку приветствия)
                                            3) Кидать специально сформированные запросы на ВК
                                            4) Смотреть на их длину в трафике
                                            5) Профит

                                            Но, конечно, это всё уже заткнули кривыми костылями в духе принудительной фрагментации. Поэтому в такой простой форме оно уже не работает.
                                            Ответить
                                            • зачем шаг2, если я могу vk.com сразу использовать как Captive portal ?
                                              Ответить
                                              • Затем, что «vk.com» внесён в «HSTS preload list», и будет загружаться по «HTTPS» даже на первом заходе, даже если в качестве «captiva portal» ты поставишь «http://vk.com».
                                                Ответить
                                                • а если я буду делать это програмно, то он будет не по https загружаться?
                                                  В чем отличие?

                                                  Еще раз: в чем отличие между запросом через JS и просто открытием браузера?
                                                  Ответить
                                                  • Отличие в том, что ты мог кидать специально сформированные запросы, которые благодаря некоторым тонкостям сжатия заголовков позволяли по длине TLS пакета оценивать, насколько точно ты угадал куки.
                                                    Ответить
                                                  • Ну ты хоть описание атаки прочитай.
                                                    >>> It relies on the attacker being able to observe the size of the ciphertext sent by the browser while at the same time inducing the browser to make multiple carefully crafted web connections to the target site. The attacker then observes the change in size of the compressed request payload, which contains both the secret cookie that is sent by the browser only to the target site, and variable content created by the attacker, as the variable content is altered. When the size of the compressed content is reduced, it can be inferred that it is probable that some part of the injected content matches some part of the source, which includes the secret content that the attacker desires to discover.
                                                    Ответить
                                                    • тогда к чему ты упомянул hsts?
                                                      Ответить
                                                      • К тому, блядь, что «HTTPS» с «HSTS» должен защищать от любого вида MITM-а. «HTTPS» спроектирован так, что ты можешь прийти в любое кафе, подключиться к вай-фаю без пароля, зайти на сайт банка и спокойно слать свои миллионы, не опасаясь, что они уйдут куда-то не туда.
                                                        Ответить
                                                        • так заходи на сайт банка, а на дрругие сайты не заходит, и не будет проблемы

                                                          нет?
                                                          Ответить
                                                          • А нахуя тогда «HTTPS»? Почему пользователь, которому обещали безопасность, должен не заходить на другие сайты?
                                                            Ответить
                                                        • А вот если я создал свой банк с сайтом https://pethu-bank.ru, и пользователь впервые зашел на мой самйт через бесплатный вифи. Как сделано так, чтобы админ роетура не смог подсунуть левый вертификат?
                                                          Ответить
                                                          • Это как раз «HSTS preload list»: https://hstspreload.org/, захардкоженный в сорцы популярных браузеров. К примеру, используя обновлённый Хром/Фаерфокс/Едже, к gcode.space ты никак не сможешь отправить HTTP-запрос (если, конечно, вручную не пропатчишь браузер).
                                                            Ответить
                                                            • Так юзер никогда и не отправляет с http.
                                                              Он зашел на https, впервые. Почему браузер решил, что ему ответил реальный pethu-bank.ru, а не подставной?
                                                              Ответить
                                                              • Потому что pethu-bank.ru прислал юзеру сертификат на домен pethu-bank.ru, и ОС/браузер юзера доверяет этому сертификату.
                                                                Ответить
                                                              • Тамушта у него в браузер вшиты корневые серты. А HTTPS хендшейк содержит:
                                                                1) пруф владения сертом сервера в данный момент
                                                                2) цепочку подписанных сертов от серверного до корневого
                                                                Ответить
                                                                • Как я могу быть уверенным, что только что выпущенный серт примет любой браузер, и только его?
                                                                  Ответить
                                                                  • серт подписан корневым CA

                                                                    серт CA вшит в браузер
                                                                    Ответить
                                                                  • > что только что выпущенный серт примет любой браузер
                                                                    Это — забота того центра сертификации, у которого ты купил (получил) серт.

                                                                    > и только его?
                                                                    А для этого ты должен верить джентльменам, которые выпускают сертификаты, на слово.
                                                                    Ответить
                                                                    • > А для этого ты должен верить джентльменам, которые выпускают сертификаты, на слово.

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

                                                                            Они конечно могут подсунуть его только одному человеку из Ирана

                                                                            ну так и интел с эпплом или мсом это может сделать с одним человеком
                                                                            Ответить
                                                                      • Да, это крупная дыра, которую тоже закрывают костылями. «Certificate pinningHTTP Public Key Pinning» — простая, но провальная попытка. «Certificate transparency» — текущий мейнстрим. Суть в том, что все (ну или почти все) центры сертификации отправляют все генерируемые сертификаты в публичный лог. На текущий момент существует хедер «Expect-CT», который говорит браузеру принимать только те сертификаты, которые есть в публичном логе (и репортить, если встречены какие-то другие), в дальнейшем вроде как планируется перевод на более продвинутые технологии.
                                                                        Таким образом, если спецслужбы сгенерируют себе кучу сертификатов, то либо они (сертификаты) не будут работать, либо их придётся загрузить в публичный лог, о чём сразу же узнают недовольные владельца сайтов.
                                                                        Ответить
                                                                        • нормальный такой чейн получится из всех в мире сертификатов
                                                                          Ответить
                                                                          • Да, там в описании лога какие-то очень заумные структуры данных для хранения и быстрого поиска сертификатов описаны. Сразу видно, что ма-те-ма-ти-ки из раш-ки делали.
                                                                            Ответить
                                                                            • какого размера это удовольствие? прикажете всем юзеррам его на диске C:\ хранить?
                                                                              Ответить
                                                                              • Хранится публичный лог на доверенных серверах (причём и самих логов тоже может быть несколько). Там вообще всё сложно и интерпрайзно.
                                                                                https://www.certificate-transparency.org/what-is-ct
                                                                                Ответить
                                                                                • Хм, т.е. помимо доверия к пачке доверенных корневых центров, теперь нужно доверять ещё и пачке доверенных лог-серверов?

                                                                                  Какое доверие )))
                                                                                  Ответить
                                                                                  • Да, а доверять пачке лог-серверов можно потому что пачка доверенных аудиторов рагулярно эти лог-сервера проверяет. Какой багор )))
                                                                                    Ответить
                                                                                    • кстати, а кто будет проверять серт по Супер Оптимальному Алгоритму?

                                                                                      Лог Сервер? Он типа готов к миллиарду запросов в минуту?
                                                                                      Ответить
                                                                                      • Он. Там внутри какие-то банановые деревья (наверное, обезьяны писали) с логарифмами, проверка наличия хэша в оптимальном дереве — O(logN), даже при миллиардных N это очень быстро.
                                                                                        https://www.certificate-transparency.org/log-proofs-work
                                                                                        Ответить
                                                                                        • Да хоть за O(1), какая разница?

                                                                                          Инфраструктурка нужна уровня корневых DNS серверов для всего этого, не?
                                                                                          Ответить
                                                                                          • Существенно меньше. В отличие от «DNS», положительный ответ от лога (а положительным будет абсолютное большинство ответов) клиент может кэшировать навечно, и более в лог по поводу данного сертификата не обращаться. А сертификаты меняются очень медленно.

                                                                                            Ну и «CT» — это инициатива «Гугла», они себе могут позволить десяток корневых DNS запустить и не особо просесть по баблу.
                                                                                            Ответить
                                                                                            • а с отозванными как быть?
                                                                                              Ответить
                                                                                              • С ними разбираются при помощи ещё одной кучки баззвордов технологий — «Certificate revocation list», «OCSP», «OCSP stapling» и иже с ними.
                                                                                                Ответить
                                                                                                • то-есть мне теперь нужно два запроса делать: к OCSP и logs?

                                                                                                  оъуеть
                                                                                                  Ответить
                                                                                                • Откуда ты всё эту хуету знаешь? Ты что, работаешь в этой сфере?
                                                                                                  Ответить
                                                                                • >доверенных серверах
                                                                                  а как я могу знать, что я говорю с доверенным сервером? Что мешает врагу по дороге спуфнуть IP?
                                                                                  Ответить
                                                                                  • Ну видимо их серты тоже зашиты в твой браузер....
                                                                                    Ответить
                                                                                    • кукареканье рекурсивного питуха слышу я

                                                                                      ты не слышишь?
                                                                                      Ответить
                                                                                      • Ну, в общем-то, эта питушня по сути неизбежна. Нельзя установить доверенное соединение, если ты не доверяешь никому. Тебе всё равно придётся доверять либо большим дядям с корневыми сертификатами, либо какому-то стороннему каналу связи, по которому можно передать публичные ключи целевого сервера (по телефону продиктовать, например).

                                                                                        Поэтому вся криптоархитектура современного веба строится на том, что для успешного взлома системы (получения доверенного сертификата на чужой домен) тебе придётся взламывать много разных сервисов.
                                                                                        Ответить
                                                                                        • достаточно сделать так: пусть для подписи серта требуется два (как минимум) CA
                                                                                          Ответить
                                                                                          • В системе доверия нет понятия* «CA», есть только понятие «сертификат». Да и по сути это очень слабое усиление: тебе нужно просто получить доступ к двум CA вместо одного — то есть, для взлома спецслужбами достаточно, чтобы на территории соответствующего государства находилось два CA.

                                                                                            *Поле есть, но по факту в проверке доверия оно не участвует.
                                                                                            Ответить
                                                                                            • А что же есть в системе доверия? Как определяется корень?

                                                                                              размести CA в США, Европе, КНР и России. требуй 4х подписей
                                                                                              Ответить
                                                                                              • А если один из них будет саботировать?
                                                                                                Ответить
                                                                                                • значит, в настройках браузера должна быть галка:

                                                                                                  * разрешаю не доверять пиндосам
                                                                                                  * разрешаю не доверять гейропке
                                                                                                  * разрешаю не доверять рус-не
                                                                                                  * разрешаю не доверять китаезам
                                                                                                  Ответить
                                                                                                  • Ну то есть саботаж одного из - это более вероятнее, чем компрометация одного.
                                                                                                    Скорее доверять n из m.
                                                                                                    Ответить
                                                                                              • В системе доверия есть только сертификаты. Каждый сертификат является либо подписанным каким-либо другим сертификатом, либо самоподписанным. Таким образом, любой сертификат образует цепочку доверия (возможно, вырожденную) до самоподписанного корневого сертификата. Список корневых сертификатов довольно мал и вшит в устройство/ОС/браузер клиента (на венде можно ввести «certlm» и проверить).

                                                                                                > размести CA в США, Европе, КНР и России. требуй 4х подписей
                                                                                                Это чрезвычайно сильно усложнит процедуру получения сертификата и увеличит вероятность отказа. К тому же, текущая система доверия просто не рассчитана на такое: в ней существует отдельных «сертификатов CA», в ней есть только подписанные и самоподписанные сертификаты. Более того, у CA обычно есть несколько (меняющихся) сертификатов, связанных в цепочку, и сертификаты клиента подписываются самой нижней «частью». Например: https://letsencrypt.org/certificates/.
                                                                                                Ответить
                                                                                                • ок, корневой сертификат самоподписан.

                                                                                                  Теперь вопрос: что мешает сделать расширение (коих в сертификате уже и так несколько) и хранить там подпись от разных CA?
                                                                                                  Ответить
                                                                                                  • То, что для проверки тебе нужно будет знать, что это подписи от разных CA. Ничто мне-CA не мешает выпустить четыре промежуточных сертификата, подписанных корневым, после чего подписать ими сертификат на google.com.
                                                                                                    Ответить
                                                                                                    • Ок, понял тебя.

                                                                                                      Но цепочка же прослеживается. Что мешает пользователю оттрекать все четыре цепочки до четырех корневых самоподписанных?
                                                                                                      Ответить
                                                                                                      • Корневых сертификатов очень мало, их просто не хватит на все CA. Собственно, в этом и суть корневых сертификатов — их должно быть как можно меньше, и за их использованием постоянно ведётся внимательное наблюдение (и да, они реально лежат в суровых сейфах на специальных железках).
                                                                                                        Ответить
                                                                                                        • Словом CA я называю корневой сервер, а не любого подписанта.

                                                                                                          зы: даже в книжке про PKI в доменной винде рекомендовалось корневой CA держать выключенным, а выдать другим (более мелким питухам) право выдавать серты.

                                                                                                          Причем корню давали длинющий ключ и пять-семь лет сроку
                                                                                                          Ответить
                                                                                                          • Ну так-то CA — это любая организация, которая выдаёт подписанные сертификаты. Их дохуя.

                                                                                                            > даже в книжке про PKI в доменной винде рекомендовалось корневой CA держать выключенным, а выдать другим (более мелким питухам) право выдавать серты.
                                                                                                            Ну да, всё правильно. Корневые HTTPS-сертификаты держат за семью замками в камере из вибраниума и достают только по очень-очень большим праздникам.
                                                                                                            Ответить
                                                                                              • Ну и, кстати, что в таком случае помешает ФСБ взять четыре CA в России, подписать ими серт для google.com и смотреть, что там граждане ищут?
                                                                                                Если у нас есть только один CA на страну, то вместе с его отключением выключится и интернет. Если CA много, но надо подписи из разных стран, то нужно в сертификаты вводить, собственно, информацию о «гражданстве» CA — а это огромный геморрой. Плюс возникают политические проблемы. Плюс ничего не мешает хакерам из ФСБ взломать четыре CA из Зимбабве, Нигерии, Либерии и Лимпопо, после чего спокойно штамповать серты для google.com.
                                                                                                Ответить
                                                                                                • >подписываются самой нижней «частью».

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

                                                                                                  >что в таком случае помешает ФСБ взять четыре CA в России,



                                                                                                  Я предлагаю требовать подпись минимум четырех CA из разных стран



                                                                                                  Без Лимпопо и Уганды. А чтобы взломать и ФСБ и ЦРУ надо быть очень крутым
                                                                                                  Ответить
                                                                                                  • > Без Лимпопо и Уганды.
                                                                                                    >> Плюс возникают политические проблемы.

                                                                                                    > требовать подпись минимум четырех CA
                                                                                                    Опять же, в системе доверия просто нет никаких «CA», есть только сертификаты. Нельзя достоверно определить, что два сертификата были выпущены разными CA.

                                                                                                    > А чтобы взломать и ФСБ и ЦРУ надо быть очень крутым
                                                                                                    Не нужно взламывать ФСБ и ЦРУ, достаточно послать четырёх людей в штатском, которые занесут по чемодану бабла четырём условным директорам CA.
                                                                                                    Ответить
                                                                                                    • >>> Плюс возникают политические проблемы.

                                                                                                      Инстансов корневых DNS тоже нет в лимпопо, это создает проблемы? Ну посадите один в африке в ЮАР, там же шафт уже есть.

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

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

                                                                                                      Разные серты -- разные ключи.

                                                                                                      Разумеется, ничто не мешает мне самоподписать чужой серт, но его же тогда в ОС и либы не вбандлят.

                                                                                                      >которые занесут по чемодану бабла четырём условным директорам CA.

                                                                                                      Тогда сейчас еще хуже: достаточно одного чемодана в LetsEncrypt, нет?
                                                                                                      Ответить
                                                                                                      • > Инстансов корневых DNS тоже нет в лимпопо, это создает проблемы?
                                                                                                        Они не решают проблему доверия, поэтому это не столь важно. К тому же, реплику корневого DNS вполне можно разместить хоть в Лимпопо, хоть в Зимбабве — никаких проблем это не создаёт.

                                                                                                        > Публичный ключ я беру из корневого самодподписанного серта.
                                                                                                        > Разные серты -- разные ключи.
                                                                                                        >>> Корневых сертификатов очень мало, их просто не хватит на все CA.

                                                                                                        > Тогда сейчас еще хуже: достаточно одного чемодана в LetsEncrypt, нет?
                                                                                                        Именно. Для решения (не полного, разумеется, полностью решить проблему доверия нельзя) этой проблемы и придумали «Certificate Transparency». Если ты занесёшь чемодан в «LE», то они тебе смогут выпустить только сертификат, не записанный в публичный лог, потому что иначе их мгновенно выебут, высушат и все сертификаты отзовут. А сертификату, не записанному в публичный лог, браузер доверять не будет (сейчас — с «expect-ct», потом вроде как вообще планируется сделать такое поведение дефолтным). Обойти это можно только для точечных атак на одного пользователя, занеся по чемодану бабла владельцам публичных логов и заставив их отдавать фиктивный ответ только одному айпишнику. При этом вероятность провала увеличивается, потому что если кто-то заметит фиктивные ответы от лога — лог тоже выебут и высушат.
                                                                                                        Ответить
                                                                                                        • короче, поясню свою мысль.


                                                                                                          Есть Корневой CA. Он сам себя подписал (как языческий бог сам себя родил). Его приватный ключ хранится в подвале ООН, охраняемый солдатами (по четыре от каждой страны).

                                                                                                          Раз в год он выдает Сертификаты четырем странам в ЕС, США, РФ и в КНР.

                                                                                                          Все четыре страны обязаны подписать сертификат govnokod.ru.

                                                                                                          В браузер вшит только Корневой (из подвала ООН). Остальные он валидирует.
                                                                                                          Ответить
                                                                                                          • Во-первых, как я уже выше писал, это катастрофически усложняет процедуру получения сертификата.
                                                                                                            Во-вторых, если ты на своём сайте разместишь картинку с Винни Пухом, то КНР обидится и откажется подписывать твой сертификат — и всё, не будет у тебя «HTTPS».
                                                                                                            В-третьих, если в США негры разъебут местный CA, то выдача сертификатов прекратится во всём мире — то есть у нас даже не единая точка отказа, у нас их аж четыре, причём отказ каждой из них отключает всю систему.
                                                                                                            В-четвёртых, в такой системе достаточно спиздить корневой сертификат — и можно подписывать что угодно. «CT», в свою очередь, эффективно защищает даже от кражи корня.

                                                                                                            Нет, я не спорю, что это весьма эффективная стратегия для валидации каких-то критически важных мировых ресурсов, но в качестве глобальной системы доверия для HTTPS её преимущества сильно перевешиваются минусами.
                                                                                                            Ответить
                                                                                                            • > это катастрофически усложняет процедуру получения сертификата.

                                                                                                              А валидация логов усложняет использование сертификата. Это как OCSP, только плюс еще одно действие. нет?

                                                                                                              >Во-вторых, если ты на своём сайте разместишь картинку с Винни Пухом, то КНР обидится

                                                                                                              А лецэнкрипт не обидится? А шафт? А верисайн?
                                                                                                              А если я УсамаБинЛанден младший, и делаю сайт про 9/11, то американцы мне дадут сертификат?

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

                                                                                                              Пользовтаель пусть сам решает кому он доверяет в зависимост от своих политическх предпочтений

                                                                                                              >в такой системе достаточно спиздить корневой сертификат
                                                                                                              Из подвала ООН?

                                                                                                              >«CT», в свою очередь, эффективно защищает даже от кражи корня.

                                                                                                              Но не защищает от 51% кажется что.
                                                                                                              Достаточно завладеть всеми серверами логов, и можно вертеть всех на хую.
                                                                                                              Ответить
                                                                                                              • > А валидация логов усложняет использование сертификата. Это как OCSP, только плюс еще одно действие. нет?
                                                                                                                Это один запрос, который ты можешь закэшировать навечно. Лишние 100 миллисекунд на первое открытие сайта — не такая уж страшная цена.

                                                                                                                > А лецэнкрипт не обидится? А шафт? А верисайн?
                                                                                                                > А если я УсамаБинЛанден младший, и делаю сайт про 9/11, то американцы мне дадут сертификат?
                                                                                                                Обидится «Let's Encrypt» — ты спокойно сможешь пойти к «VeriSign». Обидится «VeriSign» — пойдёшь к «Namecheap». Обидится любой американский CA — купишь сертификат у «Reg.ru». ФСБ потребуют ключи — переедешь в австралийский «ssltrust.com.au». В этом и суть.

                                                                                                                > Пользовтаель пусть сам решает кому он доверяет в зависимост от своих политическх предпочтений
                                                                                                                Ну а в чём тогда смысл всей системы, если обеспечение безопасности всё равно в конце-концов перекладывается на пользователя?
                                                                                                                Вообще, считать, что среднестатистический пользователь хоть чуть-чуть разбирается во всех этих ваших сертификатах и цепочках доверия — это огромная ошибка, так делать не нужно.

                                                                                                                > Из подвала ООН?
                                                                                                                Совершенно неважно, откуда.

                                                                                                                > Но не защищает от 51% кажется что.
                                                                                                                Нет, там, ЕМНИП, каждый лог независим.

                                                                                                                > Достаточно завладеть всеми серверами логов, и можно вертеть всех на хую.
                                                                                                                Целостность данных в логах постоянно проверяется независимыми аудиторами. Если что-то идёт не так — бьётся тревога, и все скомпрометированные логи ебут и сушат.
                                                                                                                Ответить
                                                                                                                • >закэшировать навечно.
                                                                                                                  Все серты всех сайтов??
                                                                                                                  половина логов говорит одно, половина -- другое

                                                                                                                  твои действия?
                                                                                                                  Ответить
                                                                                                                  • > Все серты всех сайтов??
                                                                                                                    Ну ладно, не вечно, на год будем кэшировать, благо сертификаты в общем и целом примерно через столько и протухают.
                                                                                                                    Предположим, что за год пользователь посещает миллион сайтов, каждый из которых за это время сменяет по пять сертификатов. Тогда в кэше у пользователя окажется (мы параноики и используем 64-батный хэш) 5*64*1000000/(1024*1024) = 305.17578125 мегабат данных. Не выглядит страшной потерей места. Конечно, в реальности доменов будет ещё меньше: у меня, например, за последний год в истории значится 4540 доменов.

                                                                                                                    > половина логов говорит одно, половина -- другое
                                                                                                                    > твои действия?
                                                                                                                    Единственный лог, говорящий об отсутствии в нём соответствующего сертификата — повод для провала валидации. Если я замечаю, что два разных лога дают разные ответы — я пишу в Спортлото операторам логов, после чего скомпрометированные логи ебут и сушат.

                                                                                                                    Вообще, вся эта инфа есть у них на сайте:
                                                                                                                    https://www.certificate-transparency.org/log-proofs-work
                                                                                                                    https://www.certificate-transparency.org/getting-started#TOC-Verifying-SCTs

                                                                                                                    UPD: ну и я несколько неточен, запросы к логам слать не обязательно, достаточно проверить, что у сертификата есть reasonable number of SCTs with valid signatures. «SCT» — это такой штампик, удостоверяющий, что соответствующий лог поместил в себя соответствующий сертификат.
                                                                                                                    Ответить
                                                                                                                    • >Вообще, вся эта инфа есть у них на сайте:


                                                                                                                      Зачем читать и думать, когда можно легко получить нужную информацию от тебя?

                                                                                                                      Если на пальме висит банан, а другой банан лежит в тарелке, то какой банан выберет макака?
                                                                                                                      Ответить
                                                                                                                      • Время сайта стоит дешевле, чем время гостя.
                                                                                                                        Ответить
                                                                                                                      • >Зачем читать и думать, когда можно легко получить нужную информацию от тебя?

                                                                                                                        Логика сёмы.
                                                                                                                        Ему все всё должны разжевать в рот положить.
                                                                                                                        И если вдруг комп выкинут нерабочий, он обязательно на это пожалуется.
                                                                                                                        Ответить
                                                                                    • Ага, типа того.
                                                                                      https://www.certificate-transparency.org/known-logs
                                                                                      Ответить
                                                                            • Подтверждаю.
                                                                              Ответить
                                                                        • Чем больше наслоение говна, тем больше шансов оставить очередную лазейку
                                                                          Ответить
                                                                          • Да, в этом вся суть секьюрности в вебе. Дыры в говне закрываются дырами из говна и так до бесконечности. Особое веселье добавляет необходимость поддерживать всякое старое говно (типа пятилетних телефонов/телевизоров, у которых даже корневой серт добавить нельзя, лол).
                                                                            Ответить
                                                                          • А ведь он прав.
                                                                            Ответить
                                                • Охуенно придумано, блядь. В какой-то ещё list вноситься, чтобы куки твоего сайта не спиздили, отправив запрос на http? Пиздец.
                                                  // другой гость
                                                  Ответить
                                                  • Ага, секьюрити в вебе — это одно большое цирковое представление.
                                                    Ответить
                                                    • Почему бы не делать разные куки для http и https? Тогда автор сайта смог бы нахуй отрубить http, и не генерить для них кукисы.
                                                      Ответить
                                                      • можно сделать куки только для https.

                                                        Secure cookie
                                                        Ответить
                                              • А как ты собираешься кидать специально сформированные запросы в пункте 3 без своего сайта?

                                                Вся фишка же в них.
                                                Ответить
                                                • вот, это уже интереснее.

                                                  То-есть чтобы сломать что-то, нужно выполнить указанные тобой пять пунктов.

                                                  Если я просто админ сайта, то сломать я ничего не могу: надо людей с вайфаем подключать
                                                  Ответить
                                                  • И как это отменяет дыру в безопасности, возникшую из-за возможности заставить браузер пользователя кидать произвольные запросы на произвольные домены?
                                                    Ответить
                                                    • дыра заключается в том, что нужно сломать сеть, поснифать траффик, и тогда можно постараться понять насколько угадали куки, ок

                                                      дыра, я не спорю
                                                      Ответить
                                                      • > сломать сеть

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

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

                                                        Повторюсь - корень зла именно в том, что браузер позволяет кому угодно кидать запросы куда угодно.
                                                        Ответить
                                                      • Нет. Если ты просто посниффаешь HTTPS-трафик, то получишь горстку белого шума. Дыра заключается в том, что ты можешь заставить браузер пользователя зашифровать и передать секретные данные (куки) вместе с теми данными, которые ты ему подсунешь.
                                                        Ответить
                                                        • а я могу октрыть браузер с адресом типа

                                                          http://bank.ru?petuh=krestuh

                                                          это не будет тоже самое?
                                                          Ответить
                                                          • Ну кстати будет. Если у юзера в куках есть слово petuh или krestuh, то пакет станет короче. Просто без скрипта сложновато активно подбирать куку. Но пару попыток сделать - вай нот.
                                                            Ответить
                                                          • А как? Тебе нужно как минимум два раза открыть (на деле — тысячи/десятки тысяч/...) этот сайт с двумя разными параметрами. Через «Captive portal», насколько я знаю, ты сможешь это сделать только один раз.
                                                            Ответить
                                                            • > один раз

                                                              reload=5 или как там в хедерах.
                                                              Ответить
                                                              • Дык юзер-то откроет https://bank.ru?petuh=krestuh, хедеры которого ты не можешь модифицировать.
                                                                Ответить
                        • Вот кстати весь прикол что народ сейчас смотрит запросы через wireshark или консольку браузера.

                          А юзеру не похер какой тебе софт показывает контент: бинарный или текстовый.

                          Никто же не читает сырые запросы. Максимум что делают руками: шлют курлом. Но и его тоже можно пропатчить и слать бинарники.
                          Ответить
                        • Тебе следовало написать «Слив защитан?».
                          Ответить
                          • Ок, так и быть, я засчитываю тебе слив. Ты ведь даже не открывал статью, которую нам скинул.
                            Ответить
                            • (я другой гость)
                              Ответить
                              • Похуй. Если ты тоже считаешь что из-за CORS хедеров запрос не пойдёт к серверу - то твой слив тоже засчитан.
                                Ответить
                                • Нет, не похуй. Я знал, что запрос идёт к серверу. Если нужно слить какие-то данные на свой сайт через зловредный код, то это можно сделать.
                                  Ответить
                • «Content-Security-Policy», полагаю. Делаешь «default-src 'self'» и никуда ничего не улетит.
                  Но да, это работает только в случае хорошего владельца сайта и плохих пользователей.
                  Ответить
                  • Ну да, это не в ту сторону защита. Злоумышленник по-прежнему может не писать на своём сайте такую политику и отправлять произвольные запросы куда угодно.
                    Ответить
              • Есть реальный пример?
                Ответить
                • https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
                  Ответить
                  • 1. Чтобы получить эти заголовки, нужно... отправить запрос. Т. е. отправить запрос они не мешают, они мешают получить ответ.

                    2. Классика CSRF: кроссдоменный AJAX по умолчанию запрещён, но никто не мешает вставить URL запроса в элемент <img> или <script>.
                    Ответить
                    • Если на твоем сайте расположен файл foo.js, то при этом заголовке он не сможет пойти аджаксом на другой домен.

                      Никакой запрос не пойдет
                      Ответить
                      • А зачем тады CSRF-токен придумали?
                        Ответить
                        • чтобы я к тебе на сайт с другого сайта форму не запостил, нет?
                          Ответить
                          • Как же ты собрался постить если сам же сказал, что

                            > запрос не пойдёт

                            ?
                            Ответить
                            • "post" запрос формы по нажатии кнопки пойдет. А скриптовый -- нет.
                              Ответить
                              • Скриптовый тоже пойдёт. Просто ответ на него браузер выбросит и скрипту не покажет.

                                Какое секьюрити )))
                                Ответить
                                • Опять сорок два!)
                                  При CSP не пойдет. При CORS пойдет, но ответа ты не получишь.

                                  С CSRF я точно не сделаю

                                  <img src="http://socset.ru/poslat_soobsenone=ты_хуй"
                                  Ответить
                                  • Сделаешь, если CSRF токен некачественно генерится и его можно предсказать.
                                    Ответить
                                    • качественен ли csrf в django?

                                      кажется что он есть функция от:
                                      * random
                                      * уникального ID сайта
                                      Ответить
                                      • > random

                                        Криптостойкий надеюсь? А не хуйня, которую временем и номером процесса засидили?

                                        > уникального ID сайта

                                        Насколько уникального? Могу ли я забыть его вписать? Есть ли какая-то утечка данного id?
                                        Ответить
                                        • >Криптостойкий надеюсь?
                                          вопрос к платформе. Думаю что да, на современном-то железе и современном ОС.

                                          >Насколько уникального? Могу ли я забыть его вписать?
                                          Он генерируется при создании сайта, довольно длиный.

                                          >Есть ли какая-то утечка данного id?
                                          Считается, что нет.
                                          Ты должен относиться к нему как к приватному ключу например, и не показывать его никому.

                                          Но наверное можно его как-то так криво использовать, что он утечет
                                          Ответить
                                          • > вопрос к платформе

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

                                            > считается что нет

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

                                              https://docs.python.org/3/library/os.html#os.urandom

                                              вот ключ
                                              https://docs.djangoproject.com/en/3.0/ref/settings/#secret-key
                                              Ответить
                                              • > скорее всего

                                                А ты оптимист. Нельзя с таким отношением с безопасностью работать.
                                                Ответить
                                                • Я не делаю на джанге ничего сверхсекретного.

                                                  Но мне стало интересно, и я нашел
                                                  return ''.join(secrets.choice(allowed_chars) for i in range(length))


                                                  https://docs.python.org/3/library/secrets.html#secrets.choice

                                                  надо читать https://www.python.org/dev/peps/pep-0506/ -- насколько он безопасен


                                                  The secrets module provides access to the most secure source of randomness that your operating system provides.
                                                  ----

                                                  Ну и в целом джанго это не Umi.CMS: там всё таки как правило не полные дебилы сидят, так что обычно они принимают не самые тупые решения
                                                  Ответить
                                • Небольшая поправка: для совсем подозрительных скриптовых запросов браузер сначала сделает «CORS preflight» — спросит целевой сайт, можно ли сделать такой-то запрос с такими-то заголовками.
                                  Ответить
                          • http://govnokod.ru/user/exit/?url=https%3A%2F%2Fpethu.ru
                            Ответить
              • ходор?
                Ответить
                • ходор не нужен
                  а зоголовок вот
                  https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
                  Ответить
                  • Это питушня, о которой Борманд и говорил.
                    > кидать произвольные запросы куда угодно, а потом просто прячут от него ответ если вдруг нельзя было.
                    Ответить
                    • почему прячут-то?

                      Если на твоем сайте расположен файл foo.js, то при этом заголовке он не сможет пойти аджаксом на другой домен.

                      Запроса не будет
                      Ответить
              • Ну и кстати CORS не особо спасает от того же скана локалки.

                Если DNS злоумышленника имеет очень маленький TTL, то он может вращать IP домена, с которого был загружен скрипт. И тем самым для этого скрипта все твои девайсы в локалке будут same origin со всеми вытекающими последствиями - скан, подбор пароля, анальный зонд в роутере.
                Ответить
                • Да, в том году даже описывалась интересная атака, позволяющая скрипту злоумышленника на левом сайте отправлять запросы на роутер, который из интернета вообще недоступен.
                  Ответить
                  • Блин, да эта атака лет 10 назад описывалась. В dnsmasq даже опция для какой-никакой митигации есть, можешь включить. Но в целом всем похуй.
                    Ответить
                  • На самом деле похуй на роутеры, у них обычно хороший пароль стоит.

                    Атаку, насколько я помню, воскресили из-за всяких биткоин кошельков и прочей хуйни с локальными веб-интерфейсами. Почему-то считается, что порт на 127.0.0.1 - это достаточная защита и туда никто не пролезет.
                    Ответить
          • Я же сказал, деталей сходу не вспомню.

            > то это всё-таки TLS хуёво спроектирован
            Нет, там уязвимость давал архиватор.
            Точнее целое семейство уязвимостей: CRIME, BEAST, BREACH.

            It relies on the attacker being able to observe the size of the ciphertext sent by the browser while at the same time inducing the browser to make multiple carefully crafted web connections to the target site. The attacker then observes the change in size of the compressed request payload, which contains both the secret cookie that is sent by the browser only to the target site, and variable content created by the attacker, as the variable content is altered. When the size of the compressed content is reduced, it can be inferred that it is probable that some part of the injected content matches some part of the source, which includes the secret content that the attacker desires to discover.

            Там был прикол именно в сайд-эффекте от архивации текстов. Ворецируя куски запросов, можно было смотреть как меняется архивированная длина, и угадывать части текста в кукисах, совпадающие с ворециями в запросе.
            В случае бинарного протокола с фиксированной длиной такой питушни бы не было.
            Ответить
            • > carefully crafted web connections to the target side

              Ну вот собственно и ключевой момент, вся суть веб-параши.

              Эти мудаки сами пустили злоумышленника на атакуемую тачку и дали ему право кидать произвольные запросы на сайты, к которым он не имеет никакого отношения. За каким хуем?!

              А потом начали чинить там где не сломано (безобидное зожатие).

              Они и с бинарным протоколом с фиксированной длиной тебе оракула породят. С такой то "моделью безопасности". Хотя это, конечно, будет сложнее.
              Ответить
        • > А там ещё благодаря текстовости HTTP при зожатии его всякими SPDY и шифровке HTTPS повылазили разного рода уязвимости.

          > Детали не помню, они жали хедеры, но злоумышленник мог слать хитрые запросы, угадывать какие хедеры в ответе и какой контект архиватора и через это как-то сильно упрощалось дешифровка SSL.

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

          Можно просто сделать чтоб там заголовок имел фиксированный размер в байтах, и тогда такой хуйни не будет.
          Ответить
          • Да и вообще, если так подумать, то много какой хуйни можно узнать, если анализировать на уровне того, сколько там пакетов от сервера к клиенту передается, даже если всё говно там зашифровано. Ну вот допустим, есть какой-нибудь сайт с порнографическими материалами, работающий поверх https, и кто-то хочет узнать о том, какие же конкретно картинки там кто-то просматривал. Предположим, есть некие миниатюры, а потом пользователь тыкает на эти миниатюры, и в новой вкладке открывается полная версия изображения. Прослушивающий допустим нихуя расшифровать не может, но зато он вот видит, что вот в такой-то момент клиент отправил какой-то запрос, и ему ответили таким-то количеством пакетов с таким-то размером. Зная размеры конкретных картинок, можно по размеру передаваемой шифрованной хуйни таким образом понять, какие конкретно картинки запрашивались. А если мы вот так можем понять, что вот в этой шифрованной хуйне передавалась вот эта конкретно картинка, то это уже может быть использовано для некоторых атак на основе открытых текстов (KPA). Так что надо или округлять размеры всей передаваемой хуйни до каких-то конкретных значений, или даже в периоды неактивности срать каким-то мусором, даже если пользователь нихуя не запрашивает, а когда запрашивает, тогда вместо мусора что-то там полезное отправлять.
            Ответить
            • Есть запросы вроде HEAD или OPTIONS, у которых тела нет, одни заголовки.
              Бинарушня будет занимать меньше места, иметь фиксированный размер и парситься сишкой автоматом.
              А текстушня плавающей, неудобной в парсинге.

              > Зная размеры конкретных картинок, можно по размеру передаваемой шифрованной хуйни таким образом понять, какие конкретно картинки запрашивались

              Эээ. Если на порносайте миллионы картинок, то неизбежно будут коллизии.
              Тем более откуда уверенность что там зашифрованна картинка, а не какой-то скрипт?

              >даже в периоды неактивности срать каким-то мусором, даже если пользователь нихуя не запрашивает
              Это и так происходит. На многих сайтах есть polling и просто xhrы.
              Ответить
              • > Эээ. Если на порносайте миллионы картинок, то неизбежно будут коллизии.

                Если подряд просматривать картинки из какого-то сета, т.е. открывать сначала первую, потом вторую, третью и так далее - тут уж можно понять, что есть на том сайте такой-то набор картинок, первая картинка столько килобайт занимает, вторая - столько и так далее - таким образом можно понять, что вот этот конкретный сет просматривался. И тут уже с коллизией сложнее
                Ответить
                • почему нельзя паддить рендомной хуйней?
                  Ответить
                  • Ну надо придумывать какой-то новый говнопротокол, который бы рандомной хуйней паддил, но тут еще много подводных камней, что вот а до каких размеров мы будем паддить, как это будет зависеть от размера хуйни, которую мы паддить хотим? И будет еше проблема, ну т.е. если файлы в диапазоне от 1 до 5 килобайт мы все паддим до 5 килобайт, а если от 5 до 10 килобайт - паддим до 10 - это ж дохуя трафик увеличится.
                    Ответить
                  • >почему нельзя паддить рендомной хуйней?
                    Перепитушня.
                    Ответить
              • А еще есть такой момент, что если кто-то запрашивал файл X, а потом буквально через полсекунды после него кто-то другой опять запрашивает тот же самый файл X, latency там будет ниже, чем обычно (всякие говнокеширования, на уровне самой ОС или на уровне какого-то кеширующего веб сервера). Т.е. если есть подозрение, что человек запрашивает подряд картинки из такого-то набора, сначала 1.JPG, потом 2.JPG и так далее, и по их размером мы это видим, то можно самим запросить 5.JPG перед тем, как он эту картинку запросит, и посмотреть на то, какая потом будет задержка между запросом и ответом шифрованной хуйни, которая по размеру соответствует картинке 5.JPG

                Это уже по сути timing атака
                Ответить
                • Ну и можно самим запросить у сервера ту же хуйню, которую, как мы предполагаем, перед этим запрашивал прослушиваемый клиент - и если задержка будет меньше обычной, это подтверждает некие подозрения.
                  Ответить
                • Какой «Meltdown» )))
                  Ответить
                • Так же видел делают sql injection, когда по другому нельзя достать информацию, только по задержке.
                  Ответить
                  • Подтверждаю. Называется «blind sql», выглядит примерно так:
                    SELECT IF(ASCII(SUBSTR(secret_field, X, 1)) < Y, SLEEP(5), '') FROM secret_table;

                    Мудифицируя X (индекс в строке), Y (ASCII-код символа) и условие (<, >, =) можно быстро (за ~8*len(secret_field) операций) подбирать значения полей даже тогда, когда в ответ вообще ничего не возвращается.
                    Ответить
                    • Какая дихотомия )))

                      Правда непонятно практическое применение. Зачем вообще надо писать sleep в запросе?
                      Ответить
                      • >Зачем вообще надо писать sleep в запросе?
                        А, я понял, мы сами его инжектим.
                        Ответить
                        • Кстати, а зачем вообще sleep в СУБД? Имитировать тяжёлые запросы для всяких тестов?
                          Ответить
                          • Хуй знает, но, ЕМНИП, в большинстве популярных СУБД его и нет. В таком случае он заменяется на что-то тормозящее вроде REPEAT (точно уже не помню).
                            Ответить
          • >Можно просто сделать чтоб там заголовок имел фиксированный размер в байтах, и тогда такой хуйни не будет.

            Так я же об этом и твержу.
            Как бы делал я или царь?
            Метод кодируется байтом, вместо GET/POST/PUT/PATCH = enum {1,2,3,4..}
            Жопулярные хедеры кодируются не текстом, а тоже байтами.
            Для штук типа Content-Type значения контента тоже выбираются из таблицы.
            А вот для юзеринпутов типа куков и прочей юзерагент питушни — вореабельные строки.

            Тогда по-крайней мере размер хедеров не будет пидорасить размер ответа.
            И парсить удобнее, т.к. формат бинарный.
            Ответить
            • >вместо GET/POST/PUT/PATCH = enum {1,2,3,4..}
              и как делать webdav и прочие расширения?

              >Жопулярные хедеры кодируются не текстом, а тоже байтами.
              все сто сорок четыре штуки?

              >Для штук типа Content-Type значения контента тоже выбираются из таблицы.

              Подскажите, под каким номером идет контент тайп для документа автокад? А музыкальный файл flac под каким?
              Ответить
              • >все сто сорок четыре штуки?
                Джвух бат зожатия информации не хватит?
                65535 вореций хедеров.

                >и как делать webdav и прочие расширения?
                Сделать диапазон пользовательских кодов.
                Которые могут стать стандартами де-факто.
                Ответить
              • Номер для flac — это ord('f') << 24 | ord('l') << 16 | ord('a') << 8 | ord('c'). Очевидно же.
                Ответить
                • Ну да, в видеоконтейнерах с этими 4CC кодами вполне так живут.
                  Ответить
    • >Поэтому я за бинарную сериализацию, без всей этой хуйни человекочитаемой

      Царь опять прав оказался. ЧСХ.
      Текстовый формат используют только идиоты.
      
      Текстовый формат имеет смысл только для текста, читаемого человеком.
      
      Очевидно, что всё остальное - ненужно.
      Ответить
    • ебатб тут насрато
      Ответить
      • Заговорные слова произносят над водой, которую потом дают выпить больному. Заговор следующий:

        Лежит поле богато, в нём нора засрата,
        Там срамной порог, там живёт хорёк.
        Поди с раба Божьего (имя)
        На ту нору вся грязь с нутра:
        Коли, охи, ахи, вздохи, слёзы,
        Маета, боли живота.
        Поди, дристунья, на ту нору. Аминь.
        Ответить
        • Суть всех заговоров и прочего говна сводится к тому, чтобы навязать имеющуюся у заговорщика негативную программу - другому: человеку, либо животному, за что использование их карается богом.

          Видать, прав был Чехов, когда сказал, что искоренить совсем "грязь" невозможно, ее можно только прогнать на другое место.
          Ответить
      • Потяни слив.
        Ответить
    • https://pbs.twimg.com/media/EUOv62OX0AIWoXA?format=jpg&name=large
      Ответить
    • Ладно, похуй уже.
      Ответить
    • Небовать
      территоге
      подозрителевизороге
      форумеется
      предлагодаря
      катастрофит
      багоритму
      аметит фикат
      зловременем
      сервероверить
      читаемодан
      пирформированному
      поебень-очень
      встратегия
      целевога
      серверия
      developerating
      парамечаю
      благоворные
      роутерфейсами
      пыхомать
      Криптостальное
      вертификаты
      говорециями
      Ответить
    • прыщи опять соснули: DPI может быть только один на скрин.
      Если у тебя два моника (hdpi и нет) то ты в жопе: один будет мелкий, или другой крупный.

      Есть scale у xrandr, но при скейлинге шрифтов будет блюр (потому что их рендерят без учета font hinting).

      Единственный выход -- zaphod heads.

      Интересно, как это решает винда?
      Ответить
      • Именно поэтому я против 4к моников (а ещё там игры тормозят).

        Пишут, что в десятке таки запилили отдельный масштаб окошек на каждый моник.
        Ответить
        • как то работает?

          я пишу букву Ы шрифтов 10 поинтов. Половина буквы на одном моне, половина на другом
          Ответить
          • > я пишу букву Ы шрифтов 10 поинтов. Половина буквы на одном моне, половина на другом
            На одном рисуется b, на другом — l.
            Ответить
          • А х.з., скорее всего каждое окно под один из моников подстраивается, а его кусок на втором выглядит как мыльное говно. Иначе старые проги охуеют при переводе поинтов в пиксели, оценке размеров и т.п., текст ведь больше не прямоугольник. Может быть хинтинг у шрифтов ещё пытаются подкрутить под каждый монитор, но вообще не факт.
            Ответить
            • А новые не охуеют?

              У меня шрифт 10pt на одном мониторе имеет размер N пикселей, а на другом N*4.
              Как можно отрендерить его, когда для разных резолюшено разные хинты?
              Ответить
              • Ну на одном рендери с одним хинтом, а на втором с другим. Один хер моники с разным DPI скорее всего разной высоты и с полями и физически ты их друг к другу не приложишь чтобы заметить косяки и разницу в рендере. Даже если там кусок буквы 2 раза отрендерится на обоих мониках из-за отличий в хинтинге.
                Ответить
                • типа в слове "хуй" я отрендерю "х" одним DPI, а "уй" другим?
                  Ответить
                  • Вай нот?

                    Но опять же, мне кажется что майки пошли по консервативному пути чтобы не испортить существующий софт и кусок окна на одном из моников будет тупо мыльным.
                    Ответить
                    • Я кстати в прыще знаю как порешать это хаком без Zaphod:
                      * меняем DPI (Xft.dpi и xrandr --dpi)
                      * запускаем прогу
                      * меняем обратно

                      Получается боль-мень нормально, но если такую прогу утащить на другой монитор, то она конечно превратится в тыкву
                      Ответить
                  • Проверил.

                    При переходе с моника на моник видно как прога адаптируется под новый масштаб. Просто все окно в целом становится мельче или крупнее. Т.е. на мониках с реально разным дпи это будет смотреться довольно хуёво.

                    Но, к слову, часто ли ты юзаешь окна растянутые на 2 экрана?
                    Ответить
                    • Причём пишут, что это только для dpi-aware прог, которые это заявили в манифесте и умеют соотв. сообщение о смене дпи обрабатывать.

                      А старый софт видимо тупо залочат под коэффициент того моника, на котором его запустили. И хоть затаскайся.
                      Ответить
                      • да, старый софт тупо скейлят, и он мылит
                        Ответить
                    • не часто, мне было интересно как это вообще решили.
                      То-есть прога получает нотификаицю от ОС о смене DPI от переноса окна?

                      Почему в прыще так нельзя решить? придется переписать весь софт?
                      Ответить
                      • Да, WM_DPICHANGED.

                        Ну кстати х.з. почему в прыщах не сделали. Пишут что GTK под вендой вполне так обрабатывает эти сообщения. Qt скорее всего тоже умеет. Т.е. основные фрейморки к этому готовы.
                        Ответить
                        • В X11 кажется вообще понятия DPI нет: там есть размер экрана (в инчах) и резолюшен.

                          dpi завезли в xrandr, но и там он кажется что сделан поверх фейкования размера экрана. В общем мрак, говно, и 1989-й год.

                          Может, в вейленде пофиксят
                          Ответить
                          • ps: вообще иксы напоминают говно.

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

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

                              В иксах вроде даже свой юникод был (или даже сейчас есть?)
                              Ответить
                        • Прыщебляди соснули
                          Ответить
                          • Соснули, да.

                            "Не дай бог мне иметь дело с виндой на сервере
                            Не дай бог мне иметь дело с линуксами на декстопе" (С)

                            Хотя конкретно тут соснул скорее Xorg, а вернее даже X11, а он всё же не прыщи. Так что соснули все юниксбляди
                            Ответить
                        • Не так давно вылезали проблемы в свежем Qt с большими разрешениями. Особо страдали маководы.
                          Ответить
                          • Макобляди должны страдать. И любители танковых щелей 21:9 в 4к - тоже.
                            Ответить
                            • 21:9 ему танковая щель.
                              32:9 не хочешь? https://www.lg.com/ru/monitors/lg-49WL95C-W
                              Ответить
                              • Зачем? Зачем?
                                Ответить
                                • То есть?

                                  Вон на картинке даже тебе нарисовали видеоредактор.

                                  Ещё видел, такие используются у диспетчеров. Везде, короче, где есть какая-то колбаса из дорожек или схем.

                                  Я б не отказался от такого. Но цена космос
                                  Ответить
                                  • А я бы отказался. Я видео для кинотеатров не обрабатываю. А для остального джва небольших 24" моника намного комфортнее, чем один широченный.
                                    Ответить
                                    • Да в осу можно и на сегментном дисплее играть, небось ;)
                                      Ответить
                                      • Да там вообще 4:3 для совместимости со старыми картами.

                                        Но, в целом, для игр 2 моника удобнее получается - один в эксклюзивном режиме под игру чтобы десктоп свои тормоза не вносил, второй под какие-нибудь чатики или доки. И не надо пердолиться с растягиванием и положением окна, как это пришлось бы делать на одном большом.
                                        Ответить
                                        • А разве на втором дисплее во время игры в фуллскрине не будет просто чёрный экран?
                                          Ответить
                                          • Нет, там винда рисует всё как обычно. Т.е. пассивно читать или смотреть туда можно. Но переключение с фулскрина на те окна идёт с теми же тормозами и проблемами, что и на одном мониторе (потеря экслюзива, перезагрузка текстур и т.п.).
                                            Ответить
                                            • Именно поэтому я доки по Run8 открываю вообще на отдельном ноуте.

                                              Правда, у меня сейчас и двух мониторов-то нет, плак-плак
                                              Ответить
                                              • зачем играть в симулятор электрички? Может, лучше устроиться машинистом в поезд Войбокало-Малая Вишера?
                                                Ответить
                                                • Там мультиплеер есть
                                                  Ответить
                                                  • а, ну так устройстя помощником машиниста, и катайся себе сочи-новосибирск
                                                    Ответить
                                                • Чувак, ты хобби от работы отличаешь вообще?
                                                  Ответить
                                                  • у меня нету хобби.

                                                    Интересно, а бывает смулятор маршрутки?
                                                    Или наоборот: человек работает машинистом, а в свободное время играет в симулятор программирования
                                                    Ответить
                                                    • >>симулятор программирования
                                                      балуется с пхп-фреймворками?
                                                      Ответить
                                                    • о, я нашел себе хобби

                                                      https://youtu.be/TxbvArIqskg?t=15

                                                      Симулятор козла!
                                                      Ответить
                                                    • Симулятор водителя автобуса есть. OMSI, кажется, называется.

                                                      Симулятор программирования тоже есть, посмотри на игры Zachtronics.

                                                      > у меня нету хобби.
                                                      - чо так?
                                                      Ответить
                                                      • > Симулятор водителя автобуса есть. OMSI, кажется, называется.

                                                        Называется оный симулятор «Desert Bus».
                                                        Драйвовая штука. Очень рекомендую.
                                                        Ответить
                                • Кто-то сидит за компом с 2-мя мониками.

                                  А кто-то делит один монитор с соседом по комнате.
                                  Ответить
                                  • Какой нищеброд )))
                                    Ответить
                                  • >А кто-то делит один монитор с соседом по комнате.
                                    одолжив компьютер на денек у соседа по общежитию
                                    Ответить
                                    • Я вообще в клуб хожу, когда надо погаматься или в Инете посидеть.

                                      А программирую на листочке, и ношу потом его на работу, и там ввожу в комп
                                      Ответить
                                      • Зачем дома работать?
                                        Ответить
                                        • за компом конечно, удаленно
                                          Ответить
                                          • Правильно тогда. За компуктером вообще более 30 минут в день нельзя сидеть, зрение испортится.
                                            Ответить
                                            • А если уже испортилось - то можно?
                                              Ответить
                                            • Подтверждаю. Я стал немного хуже видеть вывески, расположенные дальше 50 метров, чем 20 лет назад.
                                              Ответить
                                              • Ты давно вуз окончил?
                                                Ответить
                                                • Я вообще в вузе не учился. Зачем программисту высшее образование, когда есть курс видеолекций "освой wordpress за 24 часа"?
                                                  Ответить
                                            • Жить вообще более 60 лет нельзя, зрение портится
                                              Ответить
                                              • Причём никто не может назвать точную причину. Одни говорят, что из-за монитора, другие говорят, что из-за онанизма. Знать бы, из-за чего на самом деле оно портится...
                                                Ответить
                                • Поверни вертикально - логи и код офигенно будет смотреться.
                                  Ну или в тетрис играть.
                                  Ответить
                                  • Ну вот да, с двумя мониторами я могу один из них повернуть вертикально если захочу. А эту танковую щель даже повернуть не получится если кронштейны не докупать.
                                    Ответить
                                  • всегда использую горизонтальный монитор, это позволяет мне писать всё в одну строку шириной в 2000 символов.

                                    Коллеги потом читают на моне 4:3, и тупят
                                    Ответить
                                    • сразу видно, что ты не джавист - тебе не за строки платят, а ты кодишь за еду
                                      Ответить
                              • Танки на таком могут и не запуститься.
                                Ответить
                              • блин, 1.2 м шириной
                                Ответить
                              • Можно конечно и так использовать (из отзывов) https://avatars.mds.yandex.net/get-market-ugc/248510/2a0000016baf4f3611235eac7a34b36326e9/1920-1920
                                Ответить
                                • салфетка слева это он вздрочнул чтоль?
                                  Ответить
                                  • Видимо с горя, т.к. пишет в отзыве, что макось не поняла родное разрешение моника.
                                    Ответить
                                    • он там и с пайшармом соснет еще.
                                      Java на HDPI это пиздец
                                      Ответить
                                • Какой багор )))
                                  Ответить
                              • >21:9 ему танковая щель.

                                Всё-таки люди потеряли чувство прекрасного.
                                Эпоха Возрождения. Золотое сечение.

                                А что теперь? Всё засрато т.н. «cовременным искусством». «Пирфомансы», «инсталяции», «каляки-маляки» сплошные «танковые щели».
                                Ответить
                            • Макакобляди
                              Ответить
                            • Въебал плюс.
                              Ответить
                          • Маководы страдали из-за приложений на Qt? Это что за приложения, интересно знать.
                            Ответить
    • https://bugs.launchpad.net/unity/+bug/1463112
      Ответить
    • https://github.com/ton-blockchain/ton/blob/dbde9c1c40c1fae11fd20d6e4dbd4223eec47a8d/rldp-http-proxy/rldp-http-proxy.cpp#L891

      void receive_http_request(
          std::unique_ptr<ton::http::HttpRequest> request, std::shared_ptr<ton::http::HttpPayload> payload,
          td::Promise<std::pair<std::unique_ptr<ton::http::HttpResponse>, std::shared_ptr<ton::http::HttpPayload>>>
              promise) {
        auto host = request->host();
        if (host.size() == 0) {
          host = request->url();
          if (host.size() >= 7 && host.substr(0, 7) == "http://") {
            host = host.substr(7);
          } else if (host.size() >= 8 && host.substr(0, 8) == "https://") {
            host = host.substr(8);
          }
          auto p = host.find('/');
          if (p != std::string::npos) {
            host = host.substr(0, p);
          }
        } else {
          if (host.size() >= 7 && host.substr(0, 7) == "http://") {
            host = host.substr(7);
          } else if (host.size() >= 8 && host.substr(0, 8) == "https://") {
            host = host.substr(8);
          }
          auto p = host.find('/');
          if (p != std::string::npos) {
            host = host.substr(0, p);
          }
        }
        {
          auto p = host.find(':');
          if (p != std::string::npos) {
            host = host.substr(0, p);
          }
        }
        std::transform(host.begin(), host.end(), host.begin(), [](unsigned char c) { return std::tolower(c); });
        if (!proxy_all_ &&
            (host.size() < 5 || (host.substr(host.size() - 4) != ".ton" && host.substr(host.size() - 5) != ".adnl"))) {
          promise.set_error(td::Status::Error(ton::ErrorCode::error, "bad server name"));
          return;
        }
      
        td::actor::create_actor<TcpToRldpRequestSender>("outboundreq", local_id_, host, std::move(request),
                                                        std::move(payload), std::move(promise), adnl_.get(), dht_.get(),
                                                        rldp_.get(), actor_id(this))
            .release();
      }

      Сразу видно - настоящие Олимпиадники!
      Ответить
      • похоже на код вконтакте, но крестами обмазанный

        ну и http они неправильно ищут.
        надо так

        host[0] == 'h' && host[1] == 't' ...
        Ответить
        • Дык ton поди те же олимпиадники и писали.

          Хотя не, тут макаки какие-то писали.
          Ответить
          • Но прогресс все таки большой. substr какой-то, == перегруженный, байтоебства на порядок меньше
            Ответить
            • Зато копипаста одной и той же хуйни 2 раза. И копирование строк постоянное. Прогресс был бы если бы они вьюхи юзали. А это регресс до уровня скриптомакак.
              Ответить
              • host.substr(0, 7) == "http://" то?)
                да.

                И все таки Уникальный Стиль олимпиадников дурова проёбан.

                Что блядь такое host? почему не S4? не p2?

                >А это регресс до уровня скриптомакак.
                видимо, мне нужен был зеленый.

                Я жеж сказал, что таже самая олимпитушня, но на сей раз густо обмазанная крестами
                Ответить
                • Ну хотя кстати там везде auto. Может быть это и таки и вьюхи на оригинальный запрос.
                  Ответить
                • Кстати, если host — это std::string (а не std::string_view), то пирфоманс они знатно проебали, потому что std::string::substr() каждый раз создаёт новую строку.
                  Ответить
                  • Давайте разберем эту крестопарашную дрисню.
                    На строке
                    https://github.com/ton-blockchain/ton/blob/dbde9c1c40c1fae11fd20d6e4dbd4223eec47a8d/rldp-http-proxy/rldp-http-proxy.cpp#L895

                    наблюдаем:
                    auto host = request->host();


                    request - это чуть выше
                    std::unique_ptr<ton::http::HttpRequest> request


                    ton::http::HttpRequest это вот там
                    https://github.com/ton-blockchain/ton/blob/1de39f5d7cc1655ae691462370dffec26cd9bc77/http/http.h#L169


                    const auto &host() const {
                      return host_;
                    }
                    // ....
                    // а вот и то, чем является host_ который возвращае метод host()
                     private:
                      std::string method_;
                      std::string url_;
                      std::string proto_version_;
                    
                      std::string host_;
                      size_t content_length_ = 0;
                      bool found_content_length_ = false;
                      bool found_transfer_encoding_ = false;
                    
                      bool parse_header_completed_ = false;
                      bool keep_alive_ = false;
                    
                      std::vector<HttpHeader> options_;

                    т.е. да, это std::string
                    Ответить
                    • Да, это не олимпиадники. Это ебучие скриптомакаки которым зачем-то кресты выдали вместо скриптушни.
                      Ответить
                      • так он реально копируется?

                        лол, это наверное потому, что современных олимпиадников на питоне учат
                        Ответить
                        • Да, копируется. На каждом substr. И память аллоцирует.
                          Ответить
                          • А вот если бы они писали на няшной, то такого бы не поизошло. Там хуй ты строку скопируешь без явного вызова.

                            Может, и нельзя макаке в руки кресты давать...
                            Ответить
                            • Кстати зачем, зачем они вообще пилят хттп сервер снуля? Почему не взять готовую реализацию?
                              Ответить
                              • Потому что NIH.
                                В ВК вообще разве хоть что-то не свое есть?
                                Так и тут
                                Ответить
                              • NIH.

                                Наверное, со времён «ВК» и «Телеграма» дуровские о-лим-пи-ад-ни-ки выросли, стали тимлидами и проджект менеджерами, наняли скриптомакак и теперь командуют им пилить велосипеды с нуля, как на о-лим-пи-а-дах.
                                Ответить
                                • А не может быть такого, что олимпиадников стали учить на питухоне?
                                  Ответить
                                  • Не похоже, слишком мало оптимизаций. Хотя, конечно, всё может быть.
                                    Ответить
      • > td::Promise<std::pair<std::unique_ptr<to n::http::HttpResponse>, std::shared_ptr<ton::http::HttpPayload>> >
        Блядь, ну и дерьмо. У них руки что ли отваливались, так лень было пару тайпдефов сделать?
        Ответить
        • У них и ниже руки не отвалились вместо if (host.size() == 0) host = request.url() два раза всю хуйню накопипастить.
          Ответить
      • > if (host.size() >= 7 && host.substr(0, 7) == "http://") {

        Кстати забавно, что в сишке я мог сказать strncmp(host, "http://", 7). А в крестах удобных и эффективных аналогов тупо нет.

        string_view только с с++17.
        starts_with только с с++20.

        Можно, конечно, std::mismatch() позвать если с++14 и выше и он даже итератор на первый символ за http:// вернёт. Но до с++14 то что делать?

        Крестобляди соснули )))
        Ответить
        • Зачем ты оглядываешься в прошлое? Живи настоящим.
          Ответить
        • Неужели на этот случай нет библиотек?
          Ответить
          • boost::starts_with(host, "http://")
            Ответить
            • тащить буст ради starts_with это как тащить юнити ради

              ну ты понел
              Ответить
              • Ну это не совсем так. Стандартная либа без буста вообще неюзабельна, особенно в старых стандартах. Поэтому буст тащат при первой возможности. Он в любом случае рано или поздно понадобится. И чем раньше ты его заюзаешь - тем меньше стдшного шлака придётся писать.
                Ответить
                • У жабоёбов тоже есть такие штуки, например раньше без Commons или Guava в Java было очень хуёво
                  Ответить
                  • Именно поэтому я за «PHP».
                    Ответить
                  • Вот на самом деле алгоритмы и итераторы в крестах походу писал какой-то теоретик.

                    Да, они очень обобщённые и каждый отвечает за что-то одно. Но когда на практике начинаешь их юзать, получается пиздец в духе:
                    auto pair = std::mismatch(host.begin(), host.end(), http.begin(), http.end());
                    if (pair.second == http.end()) {
                        // pair.first указывает на символ за http://
                    }
                    Ответить
                    • Поверх этого же можно намазать высокоуровневый api.

                      В перле не было функции для копирования файла (читай да пиши сам) и не было функции для взятия логарифма по какому-либо основанию, только натуральный можно было: предлагалось log(n)/log(m) делать.

                      А потом сделали File::copy и Math::Utils..
                      Ответить
                      • > Поверх этого же можно намазать высокоуровневый api.
                        В этом и проблема: чтобы пользоваться крестами, а не дрочить .begin() .end() .begin() .end() до посинения, тебе придётся постоянно намазывать высокоуровневый API. Потом тебя это заебёт, и ты вынесешь его в отдельную либу «util». Потом тебя заебёт ебля с линковкой и ты сделаешь её header-only. Потом ты решишь поделиться своим творением, переименуешь его в «Boost» и зальёшь в какой-нибудь «Github».
                        Либо ты просто выкинешь нахуй «STL» и запилишь свою стандартную либу: реальные примеры я недавно приводил: «EASTL», «folly», «abseil» — тысячи их.
                        Ответить
                        • ну тоесть тоже самое, что и guava, commons и пр.
                          Ответить
                    • Вот в питоне и D алгоритмы ништяк. И уебищных итераторов нет.
                      Ответить
                      • угу, битсета нет в комплекте, как мы недавно узнали
                        Ответить
                  • >раньше без Commons или Guava в Java было очень хуёво

                    Блин, ну сравнил boost и какую-то сраную гуаву.

                    boost реально стоит половины гавеновского репозитория в жабе или десятка апачевских либ (а не только commons).

                    А npmy с его isTen до возможностей буста срать и срать.

                    Ну по сути верно. Без буста, в крестах довольно трудно, особенно в старых стандартах. Как и в жабе без ломбоков, гуав и прочей питушни.
                    Ответить
                    • >> А npmy с его isTen

                      У pethu всего одиннадцать пакетов. Хочу is-eq-forty-two.

                      https://www.npmjs.com/~pethu
                      Ответить
      • >host.size() >= 8 && host.substr(0, 8) == "https://
        Смотрю на эту зловонную срань, и понимаю что не зря америкосы Пашу озалупили на взлёте. Ох не зря.

        Пацан к успеху шёл.
        Ответить

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