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

    Комментарии (314) 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 текстовым протоколом.

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

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

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

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

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

              Кукарекали, что бинарь не нужен, а сами сделали уязвимый бинарь.
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • Как называется?
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Ну и как оно запрещает мне отправлять что угодно куда угодно? Да, если сильно выёбываться с хедерами, то можно нарваться на pre-flight проверку и реальный запрос до сервака не дойдёт. Да, ответ от меня спрячут.

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

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

                        З.Ы. Ну что, фаза отрицания пройдена? :)
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • CORS прописывают на том сайте, к которому идёт обращение. И, очевидно, что браузер узнает о нём только кинув запрос и получив ответ.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • Ну да, ты как админ включаешь CSP и запрещаешь своему домену ходить на другие за всяким говном. Также ты как админ выставляешь CORS и запрещаешь другим доменам читать ответы твоего сервера (или не выставляешь, по дефолту там и так запрет).

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

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

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

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

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

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

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

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

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

                                                                                                > размести CA в США, Европе, КНР и России. требуй 4х подписей
                                                                                                Это чрезвычайно сильно усложнит процедуру получения сертификата и увеличит вероятность отказа. К тому же, текущая система доверия просто не рассчитана на такое: в ней существует отдельных «сертификатов CA», в ней есть только подписанные и самоподписанные сертификаты. Более того, у CA обычно есть несколько (меняющихся) сертификатов, связанных в цепочку, и сертификаты клиента подписываются самой нижней «частью». Например: https://letsencrypt.org/certificates/.
                                                                                                Ответить
                                                                                                • показать все, что скрытоvanished
                                                                                                  Ответить
                                                                                                  • То, что для проверки тебе нужно будет знать, что это подписи от разных CA. Ничто мне-CA не мешает выпустить четыре промежуточных сертификата, подписанных корневым, после чего подписать ими сертификат на google.com.
                                                                                                    Ответить
                                                                                                    • показать все, что скрытоvanished
                                                                                                      Ответить
                                                                                                      • Корневых сертификатов очень мало, их просто не хватит на все CA. Собственно, в этом и суть корневых сертификатов — их должно быть как можно меньше, и за их использованием постоянно ведётся внимательное наблюдение (и да, они реально лежат в суровых сейфах на специальных железках).
                                                                                                        Ответить
                                                                                                        • показать все, что скрытоvanished
                                                                                                          Ответить
                                                                                                          • Ну так-то 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% кажется что.
                                                                                                                Нет, там, ЕМНИП, каждый лог независим.

                                                                                                                > Достаточно завладеть всеми серверами логов, и можно вертеть всех на хую.
                                                                                                                Целостность данных в логах постоянно проверяется независимыми аудиторами. Если что-то идёт не так — бьётся тревога, и все скомпрометированные логи ебут и сушат.
                                                                                                                Ответить
                                                                                                                • показать все, что скрытоvanished
                                                                                                                  Ответить
                                                                                                                  • > Все серты всех сайтов??
                                                                                                                    Ну ладно, не вечно, на год будем кэшировать, благо сертификаты в общем и целом примерно через столько и протухают.
                                                                                                                    Предположим, что за год пользователь посещает миллион сайтов, каждый из которых за это время сменяет по пять сертификатов. Тогда в кэше у пользователя окажется (мы параноики и используем 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
                                                                                      Ответить
                                                                            • Подтверждаю.
                                                                              Ответить
                                                                        • показать все, что скрытоvanished
                                                                          Ответить
                                                                          • Да, в этом вся суть секьюрности в вебе. Дыры в говне закрываются дырами из говна и так до бесконечности. Особое веселье добавляет необходимость поддерживать всякое старое говно (типа пятилетних телефонов/телевизоров, у которых даже корневой серт добавить нельзя, лол).
                                                                            Ответить
                                                                          • А ведь он прав.
                                                                            Ответить
                                                • показать все, что скрытоvanished
                                                  Ответить
                                              • А как ты собираешься кидать специально сформированные запросы в пункте 3 без своего сайта?

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

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

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

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

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

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

                          Никто же не читает сырые запросы. Максимум что делают руками: шлют курлом. Но и его тоже можно пропатчить и слать бинарники.
                          Ответить
                        • показать все, что скрытоvanished
                          Ответить
                • «Content-Security-Policy», полагаю. Делаешь «default-src 'self'» и никуда ничего не улетит.
                  Но да, это работает только в случае хорошего владельца сайта и плохих пользователей.
                  Ответить
                  • Ну да, это не в ту сторону защита. Злоумышленник по-прежнему может не писать на своём сайте такую политику и отправлять произвольные запросы куда угодно.
                    Ответить
              • Есть реальный пример?
                Ответить
              • ходор?
                Ответить
              • Ну и кстати 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ы.
              Ответить
              • > Эээ. Если на порносайте миллионы картинок, то неизбежно будут коллизии.

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

                Это уже по сути timing атака
                Ответить
                • Ну и можно самим запросить у сервера ту же хуйню, которую, как мы предполагаем, перед этим запрашивал прослушиваемый клиент - и если задержка будет меньше обычной, это подтверждает некие подозрения.
                  Ответить
                • Какой «Meltdown» )))
                  Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Подтверждаю. Называется «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 значения контента тоже выбираются из таблицы.
            А вот для юзеринпутов типа куков и прочей юзерагент питушни — вореабельные строки.

            Тогда по-крайней мере размер хедеров не будет пидорасить размер ответа.
            И парсить удобнее, т.к. формат бинарный.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • >все сто сорок четыре штуки?
                Джвух бат зожатия информации не хватит?
                65535 вореций хедеров.

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

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

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

          Видать, прав был Чехов, когда сказал, что искоренить совсем "грязь" невозможно, ее можно только прогнать на другое место.
          Ответить
      • Потяни слив.
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Небовать
      территоге
      подозрителевизороге
      форумеется
      предлагодаря
      катастрофит
      багоритму
      аметит фикат
      зловременем
      сервероверить
      читаемодан
      пирформированному
      поебень-очень
      встратегия
      целевога
      серверия
      developerating
      парамечаю
      благоворные
      роутерфейсами
      пыхомать
      Криптостальное
      вертификаты
      говорециями
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Именно поэтому я против 4к моников (а ещё там игры тормозят).

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

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

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

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

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

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

                      А старый софт видимо тупо залочат под коэффициент того моника, на котором его запустили. И хоть затаскайся.
                      Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Да, WM_DPICHANGED.

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

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

                          Может, в вейленде пофиксят
                          Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Соснули, да.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                А что теперь? Всё засрато т.н. «cовременным искусством». «Пирфомансы», «инсталяции», «каляки-маляки» сплошные «танковые щели».
                                Ответить
                            • показать все, что скрытоvanished
                              Ответить
                            • Въебал плюс.
                              Ответить
                          • Маководы страдали из-за приложений на Qt? Это что за приложения, интересно знать.
                            Ответить
    • показать все, что скрытоvanished
      Ответить
    • 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();
      }

      Сразу видно - настоящие Олимпиадники!
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Дык ton поди те же олимпиадники и писали.

          Хотя не, тут макаки какие-то писали.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Зато копипаста одной и той же хуйни 2 раза. И копирование строк постоянное. Прогресс был бы если бы они вьюхи юзали. А это регресс до уровня скриптомакак.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Ну хотя кстати там везде 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
                    Ответить
      • > 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 то что делать?

        Крестобляди соснули )))
        Ответить
        • показать все, что скрытоvanished
          Ответить
        • Неужели на этот случай нет библиотек?
          Ответить
          • boost::starts_with(host, "http://")
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Ну это не совсем так. Стандартная либа без буста вообще неюзабельна, особенно в старых стандартах. Поэтому буст тащат при первой возможности. Он в любом случае рано или поздно понадобится. И чем раньше ты его заюзаешь - тем меньше стдшного шлака придётся писать.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Именно поэтому я за «PHP».
                    Ответить
                  • Вот на самом деле алгоритмы и итераторы в крестах походу писал какой-то теоретик.

                    Да, они очень обобщённые и каждый отвечает за что-то одно. Но когда на практике начинаешь их юзать, получается пиздец в духе:
                    auto pair = std::mismatch(host.begin(), host.end(), http.begin(), http.end());
                    if (pair.second == http.end()) {
                        // pair.first указывает на символ за http://
                    }
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • > Поверх этого же можно намазать высокоуровневый api.
                        В этом и проблема: чтобы пользоваться крестами, а не дрочить .begin() .end() .begin() .end() до посинения, тебе придётся постоянно намазывать высокоуровневый API. Потом тебя это заебёт, и ты вынесешь его в отдельную либу «util». Потом тебя заебёт ебля с линковкой и ты сделаешь её header-only. Потом ты решишь поделиться своим творением, переименуешь его в «Boost» и зальёшь в какой-нибудь «Github».
                        Либо ты просто выкинешь нахуй «STL» и запилишь свою стандартную либу: реальные примеры я недавно приводил: «EASTL», «folly», «abseil» — тысячи их.
                        Ответить
                    • Вот в питоне и 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://
        Смотрю на эту зловонную срань, и понимаю что не зря америкосы Пашу озалупили на взлёте. Ох не зря.

        Пацан к успеху шёл.
        Ответить
    • > Алгоритмы быстрой обработки HTTP-строк
      > Как устроен парсер? Мы, как nginx, определяем массив байт и по нему

      Золотые, бессмертные строки Царя как нельзя лучше подходят к моменту.

      Какие нодыжс - ты упорлся - это бездарное говно от питухов для питухов. Нормальных вебсерверов не существует. Есть более-мене нормальные, аля http://gwan.ch - ты не смотри там на названия эзыков, а тыкай по ссылки и читай.

      Причём тут жс, флеш и прочее - всё это говно, а хтмл тормазит именно сеть и питушит сервера.

      Нормальный - я тебе описал. Ты, никакие хттп запросы руками не пишешь - я тебе описал пример с опкодами.

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

      https://govnokod.ru/13420#comment188632
      Ответить
      • Зашёл я на gwan.ch — у меня тут же сработал детектор маркетинговой питушни. На сайтах «nginx» или «lighttpd» всё по делу.
        Ответить
        • Знаешь сколько я могу парсить хттпреквестов на голой сишке? Я лучше тебе не буду говорить.

          А знаешь, сколько реквестов будет выдавать нормальные бинарные заголовки? И данные, как гзипованный хваст?

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

          Потом пишут валидирующие парсеры, ибо "мы питушки не знаем, где мы не ту букву поставили" - это ещё -50% перфоманса, вплоть до -98%.


          Я конечно понимаю, что героически решить проблему, которую сами же создали - аля: 10k rps problem. Тцп стек уже лет 100 как 10кrps умеет. Неумело этого: Питушарское хттп, хтмл и прочее говно - но у нас появились процессоры и мы написали омегабыстрые парсеры и добились своих 10krps в лучше случае, и то на статике.

          А сейчас нормальный "вебсервер", не то говно, аля нгинкс, апач и прочее - именно парсер опкодов и раскидывателей данных - выдаёт тысячи тонн rps. В тысячи раз больше, чем самый илитный веб. Как так?

          Заголовок к нормальном протоколе - это опкод и его стрктура. Это парсится процессором на скорости близкой к терабайту в секунду максимум - ну 100гигов дастс даже в самом слабом случае с тысячей переходов. Т.е. на порядки быстрее ущербанского гигабита.

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


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

            И ваше приложение будет в пиздилион раз быстрее и меньше весить, чем клиент на жопаскрипте в хроме и сервер на апаче


            Гавноеды ебучие сначала шлют контент джейсоном в base шесятчетыре, а потом чото там "оптимизируют"

            Идите двойные кавычки на одинарные поменяйте в пхп, оптимизаторы мамиеы
            Ответить
            • > Гавноеды ебучие сначала шлют контент джейсоном в base шесятчетыре, а потом чото там "оптимизируют"

              > Идите двойные кавычки на одинарные поменяйте в пхп, оптимизаторы мамиеы

              сука я аж хрюкнул
              Ответить

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