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

    +4

    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
    if ($_SESSION['USER_LOGIN_IN']) {
    if ($Page != 'notice') {
    $Num = mysqli_fetch_row(mysqli_query($CONNECT, "SELECT COUNT(`id`) FROM `notice` WHERE `status` = 0 AND `uid` = $_SESSION[USER_ID]"));
    if ($Num[0]) MessageSend(2, 'У вас есть непрочитанные уведомления. <a href="/notice">Прочитать ( <b>'.$Num[0].'</b> )</a>', '', 0);
    }
    
    
    
    
    
    $Count = mysqli_fetch_row(mysqli_query($CONNECT, "SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = $_SESSION[USER_ID] AND `status` = 0"));
    if ($Count[0]) MessageSend(2, 'У вас есть непрочитанные диалоги ( <b>'.$Count[0].'</b> )', '', 0);
    }

    Кто хочет, может использовать данную уязвимость, потому что автор сего говна имеет сайт своего паршива, написанного по его же говноурокам. http://php.webtm.ru/

    Архивы с говнокодом(больше лулзов) можно скачать тут http://php.webtm.ru/archive/
    Группа вконтактке тут http://vk.com/php.youtube
    Страничка автора говноуроков(да он думал что может скрыться) http://vk.com/vyjt3dfc1azyr0lilcq ранее назывался Артем Кодов

    Запостил: Keeper, 16 Мая 2016

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

    • А где уязвимость? Все переменные сессии хранятся на сервере, а в куки только айдишник прилетает.
      Ответить
      • С таким кодом, я думаю, если покопаться в ГОВНЕ, то можно по любому что-то найти. Исходники то есть.
        Ответить
      • ааааа
        чувак
        ты сделал мой день

        действительно. Все сессии же на сервере, все нормально с этим кодом
        Ответить
      • Да, действительно. Перепутал с подменой сессии. Была у данного говно-автора дырка связанная с куки, но он ее уже прикрыл. Но правда порыскав по коду можно найти много чего вкусного.
        Ответить
    • 3 приплюсовавших нашли уязвимость.
      из говна if ($_SESSION['USER_LOGIN_IN'])
      ну и без mvc
      Ответить
      • ну да, а вшитая локализация, таг b в 2016 году и mysqli_fetch_row(mysqli_query без препаред стейтмента это ок

        расскажи мне что там у вас поменялось )
        Ответить
        • а ты я смотрю хуй не грамотный mysqli_fetch_row(mysqli_query без препаред стейтмента
          >`recive` = $_SESSION[USER_ID] AND `status` = 0"
          Для чего тут препаред стейтмента ? для циферки которыю ты сам в сесию ложишь или для `status` = 0" ?

          Или не в пхп

          усливния пишут вот так
          if (cond==1) {
          if (cond==1){
          // .........

          }
          }

          что бы не наебаться?

          Гуесто, что за хуйню ты несешь постояно? Я уже знаю что пхп ты не осилил. Чего ты ещё хочешь?
          Ответить
          • Лол, Васисуалий
            препаред стейтмент как бы для recive` = $_SESSION[USER_ID]

            пыхоблядям неведома польза подготовленных выражений?
            ну там, кеш планировщика запросов, например, или безопасность инжекта выражений?
            Ответить
            • программисты на пхп в первую очередь руководствуются целесообразностью
              А не ебошат хуйню, что бы как все.
              > кеш планировщика запросов,
              SELECT COUNT(`id`)
              что он закеширует ?
              >безопасность инжекта выражений?
              $_SESSION[USER_ID]
              `status` = 0
              где тут возможность подмены.
              В сессию программист сам присваивает значения.

              Вы тоже ебошите if (cond) {if (cond){} } ? от не уверенности в себе?


              Программист 1 должен руководствоваться целесообразностью.
              Если в место того что бы сложить 1 +1 программист будет лепить очереди. То гнать его из профессии.

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

              "SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = $_SESSION[USER_ID] AND `status` = 0"

              Не для запросов в вакууме, а конкретно для этого запроса
              Ответить
              • >>программисты на пхп в первую очередь руководствуются целесообразностью
                лол, это стандартная отмазка говнокодера. Целесообразность тут не причем вообще.

                >>где тут возможность подмены.
                строчкой выше $_SESSION['USER_ID'] = "; DROP DATABASE"'

                >>А теперь вопрос назовить хоть 1 причину для использования препаред стейтмент для запроса
                как было сказано выше -- чтобы не строить дважды план запроса

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

                  > где тут возможность подмены.
                  я вижу динамическое значение в запросе - эта возможность вот там

                  просто пыхопе такое уебище, что там настоящей проффессиональной пыхобляди неудобно написать sql в одном месте, а подставить аргументы - в другом

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

                  только кому-то это дико, кому-то нравится сосать в грязном туалете и говорить, что это норма
                  Ответить
                  • $_SESSION['USER_ID']=1;
                    $db->exec(' .... where user_id= '.$_SESSION['USER_ID']);
                    Давай расскажи мне про динамический аргумент. И беги обмазываться абстракцией.
                    Ответить
                    • >>$db->exec(' .... where user_id= '.$_SESSION['USER_ID']);
                      ахахаха
                      оказывается ты просто не знаешь даже что такое параметры для prepared statement

                      пиздец
                      Ответить
                      • Блядь, ты как читаешь ?
                        Ответить
                        • объясняю на пальце:

                          В БД есть анализатор запросов, который строит план. Когда он видит что запрос изменился, он вынужден заново строить план.

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

                          даже в php так можно
                          http://php.net/manual/en/pdostatement.bindparam.php

                          но ты не знал
                          Ответить
                • Гуесто ты блядь конченый дебил.
                  >>где тут возможность подмены.
                  строчкой выше $_SESSION['USER_ID'] = "; DROP DATABASE"'
                  сам попробуй сделать что ты написал. Когда получится тогда приходи.

                  Ты еблан пизди еще. Я хоть поржу.
                  Ответить
                  • C:\Users\guesto>type bad.php
                    <?php
                    $_SESSION['USER_ID'] = "; DROP DATABASE";
                    echo $_SESSION['USER_ID'];
                    ?>
                    C:\Users\guesto>c:\php\php bad.php
                    ; DROP DATABASE


                    я же говорю: PHP "программисты" даже PHP не знают
                    Ответить
                    • Лол. Если так рассуждать, можно сразу в запрос это значение вставить!
                      Смотрите, уязвимый PHP, уязвимые программисты! Перед каждой строчкой можно написать mysql_query("DROP DATABASE pitux");
                      Ответить
                      • да ну нет же.

                        программист всегда отвечает за свой код, потому всегда можно юзать глобальные переменные. И все в одном файле писать. И логику с SQL и с HTML мешать. Потому что программист же не уязвим
                        Ответить
                        • Поддержу Василия и 1024--. «Инъекция» через сессию может проникнуть, только если подменить php-файлы. Но если у злоумышленника есть возможность их подменить, то инъекция лишена смысла. Можно сразу написать: system('rm -rf /*');
                          Ответить
                          • откуда ты знаешь что и как попадает в сессию? в нее могут положить что-то вообще из другого файла, который ты заинклудил
                            Ответить
                            • Действительно, если проект огромный, трудно угадать, было ли предварительно отфильтровано значение, положенное в сессию.

                              Пожалуй, придётся согласиться, что страховка не помешает.
                              Ответить
              • Попробую выразить другими словами то, что написали до меня. У тебя запрос будет выполняться для каждого юзера, зашедшего на сайт. СУБД придётся выполнить всё это:
                SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = 1 AND `status` = 0;
                SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = 2 AND `status` = 0;
                SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = 3 AND `status` = 0;
                SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = 4 AND `status` = 0;
                SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = 5 AND `status` = 0;
                ...
                SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = 9000 AND `status` = 0;


                Каждый такой запрос будет разбираться и компилироваться отдельно. Итого выражение будет компилироваться 9000 раз.

                А теперь воспользуемся подготовленными выражениями:
                $stmt = $db->prepare("SELECT COUNT(`id`) FROM `dialog` WHERE `recive` = ? AND `status` = 0");
                
                $res = $stmt->bind_param('i', $user_id);
                
                $user_id = 1; $res->execute();
                $user_id = 2; $res->execute();
                $user_id = 3; $res->execute();
                $user_id = 4; $res->execute();
                $user_id = 5; $res->execute();
                ...
                $user_id = 9000; $res->execute();

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

                Или единообразие и простота поддержки для PHP'шника не аргумент? Надо хуярить уникальный код под каждый кейс?
                Ответить
                • оно работает не так

                  пыхоблядь пишет сайт за 30т.р. за 2 недели и перестает брать трубку

                  другая пыхоблядь берёт ещё 1-2 недели, дописывает сайт, добавляя в него ещё столько же пыходерьма, где намешаны sql и html, берёт 30т.р. и спираль истории повторяется

                  какое единообразие, какая простота поддержки??
                  Ответить
                  • Напомнило http://дерьмосайт.рф/

                    Тариф «Как у всех»: сделаем, как только брат нашего специалиста освободит компьютер.

                    Тариф «Как у всех+»: пока мы просто собираем заявки,
                    а потом сделаем все сайты разом!

                    Тариф «Крутой»: управимся за 2 недели!
                    Ответить
                    • --алло, это вебстудия?
                      --да
                      --а почему шепотом?
                      --я на алгебре
                      Ответить
                • Проблема в том, Борманд, что ты объясняешь азы. Любой программист обычно на второй год программирования, лет в 16-17 (ну или кто во сколько начал) понимает что лучше всегда делать хорошо, чем иногда делать плохо. А ПХПшники этого не понимают. Это очень сильно затрудняет общение с ними. Это как говорить по-русски с человеком, который не все буквы знает.
                  Ответить
          • >>а ты я смотрю хуй не грамотный
            достаточно грамотный, чтобы понимать что хуево писать без препаред стейтмента (достаточно погуглить php sql injection, ни в одном ЯП больше нет таких проблем) и и что хуево вшивать драйвер конкретной базы

            у вас, бабуинов, PDO уже 15 лет как есть. но ни одна мартышка его не освоила. А зачем? Денис попов так писал, и мы так будем
            Ответить
    • О, вроде этого товарища бабуина с полгода назад тут постили. И даже кто-то его сайт таки поломал тогда...
      Ответить
      • У него ещё вроде группа несколько раз переименовывалась.
        Ответить
      • http://govnokod.ru/18838

        http://vk.com/php.mrshift

        Да, айдишник группы всё тот же: http://vk.com/wall-91807331
        Это свидетельствует о том, что php.youtube — это переименованная группа php.mrshit php.mrshift
        Ответить
      • Гуглим vk.com/id85947091. Получаем: «Артем Кобратов. 20 лет. 3 февраля 1996». А также забавную тему:
        https://forum.mtasa.com/viewtopic.php?p=604894
        Ответить
        • Кто все эти люди? Какие-то ресурсы, какой-то mta, какой-то форум.. Не хватает видеоблоггеров, и макса плюсстопицот

          Лучше скажи почему у парня 69 на аватаре
          Ответить
          • Чёрт с ней, с аватаркой. Гораздо интереснее обсуждение кода на lua.
            Ответить
            • table = 3
              Поздравляем, таким действием мы убили библиотеку table
              Ответить
        • Оказывается все еще интересней https://vk.com/id52551102

          Цитата со стены "ТЫ ЛАШАРА КОНСКАЯ ВЗЛОМАЛ С*КА!!!!!!!!!!!
          ВСЕ МОИ ДРУЗЯ ЭТО НЕ МОЯ СТРАНИЦА ДОБАВЬ НАСТОЯЩЕГО МЕНЯ Я http://vkontakte.ru/id85947091"
          Ответить
          • Но он не написал, кто он настоящий: настоящий Олег или настоящий Артём.
            Ответить
    • Цитата со старой версии сайта mr-shift.ru: «Здравствуйте дорогие друзья! Меня зовут Артем, в кругах своего канала по программированию, и не только, я известен как Mr.Shift. По мимо программирования, я активно занимаюсь инвестициями, чему посвятил последние 2 года. На данный момент львиную часть моих доходов приносит бизнес в интернете, я начал еще в далеком 2011 строить источник пассивного дохода, не имея никакого багажа знаний за плечами. В этом году я побил свой личный доход по ежегодному заработку - 15.000 $ и принял решение переквалифицироваться в инвесторы. Но при этом не забывать и об других направлениях (программирование, трейдинг). Моя основная жизненная позиция - не работать на дядю. Всем, кто, также как и я, решил достичь финансовой свободы, предлагаю зарабатывать вместе со мной, с первых дней вне зависимости от приглашений и квалификаций!»

      Да, раньше оно называло себя Артёмом.
      Ответить
      • А, я читал это.

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

        Это кстати очень типичный вид деятельности в российском PHP сообществе.
        Ответить
        • Но обычно все просто удаляют все 10 и заменяют своими?
          Ответить
        • Можно по-подробнее?
          Ответить
          • Конечно.
            Давайте я Вам расскажу. Вы наверное подумали "фу, это очередной спам", но дочитайте до конца! этот метод навсегда изменил мою жизнь. Давайте сюда Ваш емейл
            Ответить

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