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

    +165

    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
    // Whoever introduced xml to shipping companies should be flogged
    $xml  = '<?xml version="1.0"?>';
    $xml .= '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://fedex.com/ws/rate/v10">';
    $xml .= '	<SOAP-ENV:Body>';
    $xml .= '		<ns1:RateRequest>';
    $xml .= '			<ns1:WebAuthenticationDetail>';
    
    // почти сотня строк
    
    $xml .= '</SOAP-ENV:Envelope>';
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

    Смотри-ка, оно еще и ругается

    https://github.com/opencart/opencart/blob/58eeb544e2eddbe18b00224e10d2761259e8ce7b/upload/catalog/model/shipping/fedex.php#L48

    Запостил: Fike, 12 Мая 2015

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

    • Блин, в пыхе же есть няшный модуль для SOAP'а, в котором вызов SOAP метода делается парой строк. Зачем руками клеить и отправлять XML?
      Ответить
      • Зато переменные подставляются в строки!
        Ответить
      • Это опенкарт
        Ответить
      • для работы с одной очень навороченой финансовой системой, народ xml'ки ручками собирал, потому что у софтины которая стоит $$$$$$$$$ по каким то странным причинам был xml парсер долбануто-доморощеный и спотыкался рандомно на выхлопе человеческих xml библиотек.
        Ответить
    • Сбор SOAP-запроса руками - это высший пилотаж. Надеюсь, он ещё и wsdl регулярками парсит.
      Ответить
    • >opencart
      А не, это нормально.
      Ответить
    • зато какой пафосный коммент в стиле "нужно выпороть всех космонавтов, потому что я не могу в космос")))
      Ответить
    • /opencart/opencart/blob/58eeb544e2eddbe18b00224e10d2761259e8ce7b/upload/catalog/model/shipping/fedex.php

      путь до файла меня пугает гораздо больше, чем код.
      Ответить
      • upload не нравится? Увы, так в установочных пакетах многих CMS называется директория с кодом.
        Ответить
        • 58eeb544e2eddbe18b00224e10d2761259e8ce7b -- вот это не нравится
          Ответить
          • Вам туда -> https://github.com/contact
            Ответить
          • Вам стоит поближе познакомиться с git. Существует более короткая ссылка, однако эта всегда будет указывать на один и тот же код.
            Ответить
            • Если вдруг найдется коллизия - что произойдет?
              Ответить
              • Не знаю, не изучал этот вопрос. Думаю, что как и везде, возьмут еще один случайный хэш.
                Ответить
                • > еще один случайный хэш
                  Обычно же гит ругается в духе "неоднозначный кусок хеша, давай ещё цифр".
                  Ответить
                  • Я думаю, он имеет ввиду коллизию полных SHA-1 хешей, коих 2^160
                    Ответить
                    • Ну пригласит Линуса пивка попить по такому случаю. Тот согласится приехать, я думаю. А потом тупо добавят один пробел в исходник и перекоммитят заново.
                      Ответить
                      • А потом устроит очередной срач в духе "гит говно, в свн такой бы хуйни не было"
                        Ответить
                      • Или в комментарий.
                        Ответить
                    • Вероятность того, что метеорит хедшотнет 314_dar'а в ту секунду, когда он будет коммитить текст и то больше...
                      Ответить
                      • Зачем Вы травите писателя?
                        Ответить
                      • Предположим, что один качественный метеорит падает раз в 100 лет. Хедшотом будем считать попадание с точностью до дециметра.

                        Площадь земли 510072000 кв. км. (51007200000000000 кв. дм.), секунд в 100 годах примерно 3153600000. Вероятность получается что-то около 2^(-87). А у коллизии - 2^(-80).

                        В общем я немного лоханулся, коллизия в 128 раз вероятней хедшота ;)
                        Ответить
                        • так-то качественный метеорит раз в 100 лет - это совсем не дециметр

                          Ежегодно на поверхность Земли падает до 1000 метеоритов общей массой 1500-2000 тонн (5-6 тонн за одни сутки)
                          Ответить
                        • http://www.segodnya.ua/img/forall/users/972/97259/_01_64.jpg
                          Тридцатиметровые метеориты падают раз в 250 лет, но при это площадь распидорашенной территории на порядок больше.
                          Ответить
                        • А дециметровые так и вовсе сыпятся чуть ли не постоянно.
                          Ответить
                        • http://sdnnet.ru/n/357/


                          >>Всего на территории РФ за 250 лет было найдено только 125 метеоритов

                          Россия - 17 075 400 кв км
                          Земля - 510 072 000 кв км

                          (З/Р* 125)/250 = 15 примерно в год
                          значит 1500 в век
                          Так что все таки вероятность коллизии меньше
                          Ответить
                          • >>>Всего на территории РФ за 250 лет было найдено только 125 метеоритов

                            А сколько ещё ненайденных метеоритов? Или метеоритов, которые просто никто не искал?
                            Ответить
                            • не важно. Главное доказать или опровергнуть предположение
                              Ответить
                          • ключевое слово - найдено.
                            Ответить
                            • И?
                              Ответить
                              • А сколько еще НЕ найдено? Ладно, пофиг.
                                Ответить
                                • kegdan в http://govnokod.ru/18152#comment286112 написал:
                                  >> не важно. Главное доказать или опровергнуть предположение
                                  Ответить
                        • Так что морально Сема уже мертв
                          Ответить
                          • А ещё можно его обрадовать тем, что это вероятность того, что его в конкретную, заранее выбранную секунду хедшотнет. За всю жизнь вероятность будет намного больше ;)
                            Ответить
                            • Щас он прибежит и начнет кричать "помогите, ватники метеоритом убивают"
                              Ответить
                              • Ну а кто же ещё убивает? По снимкам сразу ясно, что все метеориты прилетают с колорадской территории. В Центральной Европе таких метеоритов не бывает.
                                Ответить
                              • Кстати, а правда, что пару веков назад Парижская академия наук уничтожила коллекцию найденных метеоритов под предлогом, что в небе камней нет и с неба камни падать не могут?
                                Ответить
                                • ЕМНИП было такое.
                                  Ответить
                                  • Самим парижским академикам не довелось узнать о появлении новой теории Хладни. Ее опубликование в апреле 1794 г. почти совпало с гибелью великого Лавуазье, казненного в том же году Великой французской революции. Еще раньше, в 1789 г., умер О.Фужеро. И лишь Л.Каде дожил до 1799 г., когда теория Хладни только начала распространяться в Европе.

                                    Отсюда: http://vivovoco.ibmh.msk.su/VV/JOURNAL/NATURE/08_00/BOLIDE.HTM
                                    Ответить
                                    • Они еще довольно долго практиковали флогистон (вещество, которое якобы выделяется из тел при горении) после того как Лавуазье создал теорию горения.
                                      Ответить
                              • Ватники хуй сосать только могут, бггг
                                Ответить
                                • Сама ватник бггг
                                  Ответить
                                • Не согласен с Вами. Для того, чтобы сосать чей-то хуй, вовсе не обязательно быть "ватничком".
                                  Приезжай, я тебе наглядно это продемонстрирую (надеюсь, у тебя от 22 см). Адрес: Украина, Киев, седьмая авеню, спросить Тараса Березняка.
                                  Ответить
                      • Ну ок, предположим, будет ошибка в коде sha256
                        Ответить
                        • То её бы давно уже нашли. Потому что там бы все репы перепидорасило бы. Особенно если с ними работают не самим гитом, а какими-нибудь сторонними либами.

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

                          > sha256
                          Кстати, там sha1.
                          Ответить
                          • Ну я немного не про то.
                            >Чего не скажешь про асимметрику...
                            Схуле? Асимметрика или используется для согласования ключа, или есть хеши. Неправильный ключ где-нибудь да вылезет.
                            Ответить
                            • Ну симметричные шифры и хеши вообще тривиальны - в большинстве даже условных переходов нету (кроме циклов с фиксированным числом итераций). Я когда sha256 пилил для прикола - самое сложное было в padding'е не лохануться.

                              А вот в длинной арифметике и асимметрике частных случаев и граблей дофига и больше, и вылезет этот косяк в одном случае на миллион. А такие редкие косяки - самые страшные.

                              Вот получится, что твой код случайно принимает подпись за верную с вероятностью 1/1000000...
                              Ответить
                              • Они сложнее хеш-функции, но не настолько, особенно если разбираться в математике, которая за ними стоит.
                                Ответить
                        • вероятность этого даже меньше, чем вероятность коллизии
                          Ответить
                          • Не, вероятность накосячить в коде всегда очень большая. Но тут такая задача, что вероятность словить и починить косяк близка к единице.
                            Ответить
                            • Да эти алгоритмы уже обсосаны со всех сторон. Если свой писать - да, можно накосячить. А если юзать общедоступный код данного алгоритма - вероятность найти ошибку в коде близка к нолю - комьюнити уже допилило код до божественного идеала

                              Тем более sha-1 был создан где то лет 20 назад
                              Ответить
                              • >комьюнити уже допилило код до божественного идеала
                                ага, какой-нибудь openssl вообще идеал кода :)

                                [mode=paranoia]не удивлюсь, если к такому идеальному коду приложили руки товарищмайоры из анб[/mode]
                                Ответить
                                • Шутки шутками, но даже если и не приложили - бюджет у них нереальный, ревьюеров наверняка нанимают и о дырках узнают быстрее общественности.
                                  Ответить
          • https://clck.ru/9Uyph

            А так?

            P.S. Или даже так: http://tinyurl.com/klyovaya-ssylka
            Ответить
            • Я уже получил ответ от Fike. Да, этот момент я проглядел. Редко когда приходится давать ссылку на конкретный коммит.

              P.S. Да, upload мне тоже не нравится :)
              Ответить
              • Что-то мне подсказывает, что и в этом случае не было смысла давать ссылку на конкретный коммит. Тут разве что номер строки с ругательным комментарием может измениться.

                P.S. А нет, в старых версиях такого комментария не было.
                Ответить
                • ну я вот не люблю этого, пару раз уже натыкался на свои ссылки, где все съехало, теперь стараюсь точные давать.
                  Ответить
    • Смех - смехом, но была нужда прикрутить к PHP Onvif протокол, который тоже по средствам соупа рулит... Проебался неделю, плюнул, написал на Python. Ебанутый этот соуп модуль у пыхи.
      Ответить
      • а в чем проблема то была? Я сейчас активно юзаю SOAP. Меня только ручная запись WSDL бесит.
        Ответить
      • >по средствам соупа
        Виртуал васи?
        Ответить
    • похороните уже SOAP, как страшный сон жабы
      Ответить
      • предложи свой инструмент понятного недвусмысленного взаимодействия гетерогенных систем, с формализованным типизированным описанием (чтобы не создавать ничего руками) и поддержкой почти всеми, независимо от языка имплементации
        Ответить
        • Ну протобуф от гугла разве что. Формализованное описание, генератор навоза и кроссплатформенность в наличии.
          Ответить
          • Формализованное описание самогенерится на основании написанного кода (аннотациями)?

            Протобуф предоставляет способ описания и генерации тела сообщений, но обмен возлежит на сторонних имплементациях. Кстати, сюда же - в декларации .proto ничего нет про эндпойнты.

            Ну и как-то не нашёл в примерах ничего сложнее, чем int, string и enum. Например, даты типа никому уже не нужны?
            Кто будет стандартизовывать сериализацию нужных всем типов?

            Короче, сыровато и узкозаточено.

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

              Главное - не работать с SOAP вручную, как в топике. HTTP + зверское XML с неймспейсами всё же не для слабонервных.
              Ответить
              • Ну так мыльный хмл и рассчитан на то, что бы его генерили и парсили, а не читали и пытались воспроизвести вручную всякие буратины вроде автора этого говнокода.
                Ответить
            • grpc от того же гугла. Наворачивает рпц поверх хтмл 2 и протобуфа.
              Ответить
          • Есть ещё thrift, на нём все fb-шные rpc работают.
            В отличии от протобафа, он генерит не только сериализацию.
            Ответить
          • А еще есть AMF + BlazeDS, а если купить Флашбилдер, то и генератор описания сервисов будет.
            И хотя в этом сообщении нет зеленого цвета, AMF, тем не менее, относительно хорошо спроектированый формат. Даже немножко жалко, что его выбросили на помойку вместе со всем остальным.
            Ответить

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