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

    +71

    1. 1
    2. 2
    3. 3
    <?php
    </script>
    ?>

    ПыхапеГовно выдаёт:
    ?>
    Как оказалось, ему асболютно пофиг каким тегом его открывают, и каким закрывают... <script language="php"> echo "blah-blah-blah"; ?> тоже работает...

    Запостил: Lowezar, 05 Ноября 2012

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

    • Это было действительно ВНЕЗАПНО.
      Ответить
    • Вот зи фак...
      Ответить
    • показать все, что скрытоГовно твой мозг, коли такие штуку делаешь
      Ответить
      • Говно мозг того, кто написал реализацию PHP, позволяющую такие штуки делать, и при этом не выдавать никаких ошибок и предупреждений.
        Ответить
    • Не знал про такую веселую штуку.

      $ php -r "123</script>456"
      456
      
      $ php -r "123?>456"
      456


      В PHP 4 варианта тегов, два из которых доступны всегда, а два - только при установке определенных настроек. При этом все 4 варианта можно смешивать в любой комбинации.

      http://php.net/manual/en/language.basic-syntax.phpmode.php
      Ответить
    • невалидненько
      Ответить
    • показать все, что скрытоТак было всегда, это нормально, теги взаимозаменяемые
      Ответить
      • > это нормально
        Если вы считаете смешивание тегов в духе <?php какой-то код </script> нормальным, у меня для вас плохие новости.

        Да это есть и всегда было, да с этим можно смириться и никогда так не писать. Но считать эту "возможность" нормальной - простите, верх идиотизма.

        P.S. Ходить по улицам голым, покачивая хуем в стороны, тоже в какой-то мере нормально... для диких племён. Видимо у пыхеров такое же понятие нормальности.
        Ответить
        • Дружище, я это к тому что это не баг в php, php сам по себе бардачный язык, в нем куча всего подобного, а вот как поступает кодер это другой вопрос)
          Ответить
          • Сорри за жесткий стиль моих комментов, я конечно погорячился ;)

            > это не баг в php
            Ну да, документированный баг становится фичей. Известный факт.

            P.S. Интересно, пофиксят ли эту багофичу в будущих версиях PHP... по идее никакого вменяемого применения у нее нет.
            Ответить
            • >Ну да, документированный баг становится фичей. Известный факт.
              Ответить
              • — раздался пронзительный голос со стороны параши.

                Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?

                Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
                Ответить
          • Наткнулся на самом деле немного иначе. У нас неожиданно пропало пол-вьюхи. Ошибок пых никаких не писал. Мельком глянули внутрь - ну вроде нормально, кусочек js генерится на пыхе, закрывается потом </script>, дальше остальной контент идёт... Случайно в 50-й раз приглядываясь, заметили что ?> пропущено было. :) Закрывающего сыграл </script> и вся остальная страница оказалась внутри js. :)
            Ответить
            • Так это еще и чревато утечкой исходников вместе с конфигами.
              Ответить
              • > вместе с конфигами
                А вот нехуй смешивать конфиги и остальной код ;)

                Если конфиг в отдельном файле, то возможностей для утечки гораздо меньше.
                Ответить
                • P.S. Вот собственно за что я и не люблю CGI (PHP в режиме модуля формально не CGI, но только формально, сути это не меняет). Ловким движением руки админа сайт превращается... сайт превращается... в полный репозиторий своего кода ;)
                  Ответить
                  • Кажется, где-то показывал ссылку, но на всякий случай повторю: http://habrahabr.ru/post/70330/

                    Утечка может быть не только из-за слетания хендлера, но и из-за наличия в продакшене всякого мусора типа служебных поддиректорий .cvs/.svn, доступных через http.
                    Ответить
                    • Ну хранить .git/.svn в раздаваемой зоне это уж вообще маразм... Проще уж тогда на гитхаб выложить исходники проекта, и ссылку на него где-нибудь внизу странички привести :)
                      Ответить
                      • Простой апдейт сайта: svn update и фсе.
                        Ответить
                        • > Простой апдейт сайта: svn update и фсе.
                          У всех VCS есть хуки. В хук прописываем копирование файликов куда надо, и фсе ;) На openshift примерно так и деплоят. Делаешь git push, и сервер выполняет все что нужно для обновления сайта. Даже заходить на сервак не надо.

                          Я надеюсь, у вас не возникает извращенной мысли о пилении сайта на боевом сервере (привет, Страйко!), и коммитах прям из той же директории? :)
                          Ответить
                          • Не факт, что они хотят автоматически переносить на сайт каждый коммит.
                            Ответить
                            • А кто заставляет делать push на боевой сервер каждый коммит? Я когда с openshift'ом игрался, настраивал в git'е 2 ремоута, origin на битбакете и deploy на сервер опеншифта. Пока отлаживашься - пушишь на битбакет, чтобы была история. Когда более-менее разумный код - пушишь на опеншифт, чтобы код попал в продакшн :)
                              Ответить
                              • С svn так не выйдет.
                                Ответить
                                • С свн можно написать небольшой скрипт, назовем его deploy.sh, который сделает чекаут нужной тебе ревизии и скопирует файлы куда надо и как надо. Это всяко лучше, чем древо свн прямо в папке, раздаваемой вебсервером ;)

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

                                    Мне из деплойментов больше всего нравится деплой из CI: там собирался билдец, по нему гонялись тесты, и дальше по пайплайну можно было его деплойнуть на staging.
                                    А там QA мог нажать кнопку и деплорйнуть его на продакшен

                                    А меньше всего мне нравился PHP программист с total commander, FTP на продакшене и редактором по F4
                                    Ответить
                                    • Деплойнул свой член тебе за щеку, проверь, ещё умничать тут будет, блядь.
                                      Ответить
                                      • я знал что ты именно так и деплоишься, стертор
                                        Ответить
                                    • Как ты этот тред отыскал вообще?
                                      Ответить
                              • Интересная методология. Почему не dev/master branches?
                                Ответить
                                • Вполне может быть что у него был бранч /prod который он сначала собирал у себя, а затем пушил на свой опеншифт
                                  Перед этим еще можно делать сквош, чтобы пушилось быстрее)

                                  Кстати, "dev" бранча может быть недостаточно: может быть несколько фича бранчей, работающий (но слишком сырой) мастер и бранч "prod" куда мерджат (ну или вообще черипикают) коммиты из мастера, и выливают на прод

                                  ну вот каждая выливалка еще тагируется версией, чтобы всегда можно было собрать


                                  зы: но вообще я против доставки на прод через VCS.
                                  Билд все равно надо собирать, даже если ты пишешь на некомпилируемых языках все равно их нужно минимизировать, удалять тесты, удалять всякую хрень девелоперскую итд
                                  Ответить
                                  • Напушил тебе за щеку, проверь.
                                    Ответить
                                  • dev-ветки и будет недостаточно, git flow нашё всё в данном случае.

                                    просто
                                    1) зачем иметь слишком сырой мастер, что тогда вообще в dev?
                                    2) нет ли вероятности по пьяни запушить изменения не в тот origin? :-)
                                    Ответить
                      • Вот оно еще что.

                        Most web servers are configured by default to disallow access to directories that begin with a period (the traditional prefix for a hidden file or folder in UNIX) – which makes this problem more embarrassing for the affected sites as not only have they mismanaged their version control, but have somehow managed to disable the standard safeguard in webservers meant to prevent hidden files and folders from being returned to users.
                        Ответить
                • Ну хорошо, собственно конфиги вряд ли, но код (с дырками) может утечь. Алсо уже было, что по какой-то неведомой причине сайт выдавал исходники вместо запуска скрипта. Увел пасс от базы, но так и не нашел куда его вбить (pma там).
                  Ответить
                  • > Алсо уже было, что по какой-то неведомой причине сайт выдавал исходники вместо запуска скрипта
                    Ну как я и писал выше: "Ловким движением руки админа сайт превращается... сайт превращается... в полный репозиторий своего кода ;)". Такая херня случается если хендлер PHP сдуру удалили в конфиге вебсервера. Решето, чо.

                    P.S. Сама идея хранения кода, конфигов и хтмл шаблонов в одной папке она уже порочна. А в пыхе ее возводят в абсолют, упихивая все это в один файл...

                    P.P.S. Еще один забавный костыль, используемый пыхомакаками - файл index.html, который нужно ложить в каждую папку, чтобы криво настроенный вебсервер не показывал индексы папок... Но, видимо, они не подумали, что сервер можно настроить еще кривее, что по дефолту он будет пытаться найти index.htm, а не html :)
                    Ответить
                    • Вот почему, кстати, авторы некоторых фреймворков (и даже попсового ZF) настоятельно рекомендуют весь пыхокод (кроме index.php) размещать за пределами директории htdocs.

                      Единственный недостаток такой рекомендации в том, что она неосуществима на shared-хостингах, где админу только htdocs и доступна.
                      Ответить
                      • Это довольно очевидно. Ни в каком больше языке в мире никто не хранит код в htdocs

                        Даже в моем перловом децтве перл жил в папке cgi-bin потому что только там было право делать execute, зато там не было read
                        Ответить
                        • Во времена пыхохостингов с аплоадом по ftp только htdocs и был доступен.
                          Ответить
                          • да, были говновремена и говнотехнологии
                            но вот ни ДО них ни ПОСЛЕ ничего подобного не было

                            да и там можно было сложить все в подпапку и закрыть через htaccess
                            Ответить
                            • А что было до, напомни? Народ.сру?
                              Ответить
                              • ну были хостинки с перлом
                                там cg-bin лежал отдельно от htdocs тому що в apache надо было явно сказать кому можно ExecCGI а кому нет
                                Ответить
                                • Не видел и не слышал. В любом случае, пхп - это практически начало массовых хостингов.
                                  Ответить
                                  • ты просто не делал веб в 98-2000гг, в то время был только perl и только cgi, и конечно же ExecCGI был включен только у cgi-bin, и еще надо было явно делать chmod +x [твой_скрипт] (можно по ftp) чтобы работало
                                    Ответить
                                    • Я не говорил же, что их не было. Но тогда и веб был мало у кого.
                                      Ответить
                                      • да ну, уже бум доткомов был у америки

                                        17,087,182 сайтов было в 2000м году
                                        413,425,190 пользователей
                                        Яндекс был уже, гугл был, paypal был
                                        Ответить
                    • > что сервер можно настроить еще кривее, что по дефолту он будет пытаться найти index.htm, а не html
                      Настоящий программист напишет скрипт, который поместит в каждый каталог index.html, index.htm, index.php, Default.aspx, Default.html, Default.htm, default.html, ... и с каждым новым кривым сервером будет пополнять список.
                      Ответить
        • >>Ходить по улицам голым, покачивая хуем в стороны,
          Убило наповал)))))))))))))))))
          Ответить
    • А IDE/npp это не подсвечивают?
      Ответить
      • А IDE тоже посчитала это закрывающим тэгом. А подсветка абракадабры JS для того файла отключена/игнорируется, потому что там всегда жалобы вокруг генерящегося пыхом куска.
        Согласен, что сами виноваты, и это можно было сделать иначе, но не всегда целесообразно переписывать наследство на свой лад. :)

        P.S. А вообще вы некроманты, я про этот свой ГК забыл уже. :)
        Ответить

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