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

    +151

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    function pro($input) { 
    $input=str_replace("\0", '_', $input); 
    $input=trim($input); 
    $input=strtr($input,array('!'=>'&#33;','"'=>'&#34;','$'=>'&#36;','%'=>'&#37;',"'"=>"&#39;",'('=>'&#40;',')'=>'&#41;','*'=>'&#42;','+'=>'&#43;',','=>'&#44;','-'=>'&#45;','.'=>'&#46;','/'=>'&#47;',':'=>'&#58;','<'=>'&#60;','='=>'&#61;','>'=>'&#62;','?'=>'&#63;','@'=>'&#64;','['=>'&#91;','\\'=>'&#92;',']'=>'&#93;','^'=>'&#94;','_'=>'&#95;','`'=>'&#96;','{'=>'&#123;','|'=>'&#124;','}'=>'&#125;','~'=>'&#126;')); 
    return $input; 
    } 
    
    function depro($input) { 
    $input=strtr($input,array('&#33;'=>'!','&#34;'=>'"','&#36;'=>'$','&#37;'=>'%',"&#39;"=>"'",'&#40;'=>'(','&#41;'=>')','&#42;'=>'*','&#43;'=>'+','&#44;'=>',','&#45;'=>'-','&#46;'=>'.','&#47;'=>'/','&#58;'=>':','&#60;'=>'<','&#61;'=>'=','&#62;'=>'>','&#63;'=>'?','&#64;'=>'@','&#91;'=>'[','&#92;'=>'\\','&#93;'=>']','&#94;'=>'^','&#95;'=>'_','&#96;'=>'`','&#123;'=>'{','&#124;'=>'|','&#125;'=>'}','&#126;'=>'~')); 
    return $input; 
    }

    во всяком случае аффтар считает что это действительно защита не в рот ибацца, anti sql inj.. это вам не это.

    Запостил: GoodTalkBot, 24 Августа 2010

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

    • depro... без proдыха, proсыха...
      Ответить
    • Ни в чем невиновные ASCII символы типа "@" зачем-то заменяют на энтити.
      А потом обратно.

      Зачем?
      Причем тут sql injection?
      Почему букву Ы не заменяют, а символ "_" заменяют?
      Ответить
    • если следовать логике автора кода, то была бы его воля он бы все символы (которые только нельзя и можно) законвертил по самое энтити...
      Ответить
    • Как-то я работал в чудесном проекте -- свежем источнике лулзов.
      Там было порядка трех тысяч .asp файлов на vbs, в каждом из которых была пара-тройка SQL запросов.
      И конечно в каждом была SQL инъекция. Когда автору указали на такую проблему, он прошелся автозаменой по файлам, и везде добавил код, который вырезал из приходящих POSTом/GETом параметров слова DELETE, UPDATE, WHERE и почему-то цифру 1. (видимо потому что кто-то подставлял в условие 1=1).

      Людям, имевшим эту цифру в ZIPCODE или пароле тогда крупно не повезло.

      Что-то мне это напоминает
      Ответить
      • что же это за чудо такое на 3 тысячи файлов, да еще и в каждом дырка? :))
        Ответить
        • Ну там была один человек, который сделал сайтик. Потом сайтик начал расти, начала появлятся логика, и когда его просили добавить на сайт новую страничку -- он делал новый .asp файлик. Просто копировал другой, и немного его правил. Получилось где-то 200 файликов (сайт был больщой). Потом попросили сделать поддержку другого языка, он скопировал все в папчку с названием языка, и получилось уже 400 файликов.

          Спустя лет 5 там было уже много языков.

          Мы делали бекенд на .net, а веб-сайт компании был таким вот уродцем. Мы с ним через COM interop общались. Ссылку не могу дать, к сожалению по этическим причинам.

          А инъекция была очень простая: "SELECT * FROM users WHERE user_id=" + Request("userId")
          Ответить
          • ссыль и не прошу :) но товарисч извращенец тот еще. 5 лет вот так это пестец товарисчи. убил бы 2-3 да пусть даже не дня а недели и перевел на норм двиг, хотя если одна страничка=адин файлик что же там делал *sql неясно..

            в асп не хожу но Request("userId") это типа не фильтрованного $_REQUEST['userid'] я так понял :))
            Ответить
            • товарищ был фееричен. Я не уверен, что он вообще знал про CMS.

              Там была, например, авторизация и сообщения типа "привет %username%". Вот код, который ходил в базу данных и выводил такую строчку и присутствовал в каждом файле.
              Ответить
    • Это реализация старейшего и простейшего алгоритма по защите от sql инъекций. Если его сделать по-нормальному, то можно избежать и XSS.
      Очень позорно, что здесь про такое слыхом не слыхивали, но устроили "обсёр" на непонимании.
      Эта реализация содержит избыток замены символов, но это не говнокод, просто автор без полного понимания подошёл к реализации.

      Уважаемый GoodTalkBot, мне очень интересно, как вы смогли бы обойти эту "ни в рот ибацца" защиту?
      Реализацию в студию!
      Ответить
      • запись mysql_real_escape_string - экранирование кавычек , ты не поверишь но да это помогает избежать скуль. при выводе htmlspecialchars то есть реализация этого самого перевода html символов в их сущности, что как ни странно спасает от xss
        Ответить
        • Ну, для начала, мой милый друг, давай не будем тыкать. Возраст у нас разный.
          Во вторых, если есть абсолютная уверенность в mysql_real_escape_string, то советую почитать "хацкерские сайтики" на тему обхода.
          Конкретно для этой функции есть атака, которая позволяет обходить её.
          Советую заняться сперва ликбезом, а после писать писульки.

          Да, вопрос остался открытым:
          реализацию обхода этой "ни в рот ибацца" защиты в студию!
          Ответить
          • показать все, что скрытоНу, для начала, мой милый друг, давай не будем тыкать. Возраст у нас разный.
            ---
            ....

            Конкретно для этой функции есть атака, которая позволяет обходить её.
            ---
            где она? если ты знаешь что она есть давай в студию реализацию.

            "хацкерские сайтики"
            ----
            xakep.ru чтоле :))))

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

              PS: xakep.ru - это глянец для псевдохацкеров, обсуждаемый свежие сплетни и новинки в хац-товарах в сфере взлома.

              N: и ещё раз, убедительная просьба - без оскорблений.
              Ответить
              • показать все, что скрытоВо-вторых, за безопасность я получаю деньги, и делиться информацией в легкодоступной форме я не собираюсь, так как не хочу, чтоб в мою сферу пришли безграмотные полукровки.
                ---
                жги есче :)))
                Ответить
              • Единственный способ обойти mysql_escape_string это использование 2 байтовых символов.
                а mysql_real_escape_string не обходится. Посему Орать на все интернеты что Вы супер хакер и супер Взрослый дядька не стоит. А Приведенный здесь код обходится в путь. И я не буду орать сто я никому не скажу как. Я скажу прям здесь и сейчас........
                Готовы ....
                Тогда внимайте.
                На вход подается не сложный набор символов что вроде <script> alert(1) </script> он отлично обрабатывается. И пишется в базу и все хорошо. Но при выводе в браузер этот код подвергается обработке функцией depro и снова становится рабочим вот и все я заставив сайт исполнять свой JS я вообще не напрягаюсь разнесу его нах....... Хорошо что я добрый.
                Ответить
                • <script> alert(1) </script> я обработаю через htmlspecialchars
                  Ответить
                  • а нахуя тогда нужена вот эти функции если их результат все ровно нормальными функциями обрабатывать нужно. при записи в базу mysql_escape_string при выводе htmlspecialchars и все. ИМХО сабж Говнокод и толку от него 0
                    Ответить
                • Функция depro не используется для вывода, в том-то и дело, ну это если следовать оригинальному алгоритму.
                  Его суть, все пользовательские данные обрабатываются функцией pro, а depro нужна крайне редко, для получения оригинального пользовательского значения и только для внутренней работы!
                  По поводу криков на весь интернет и возраста:
                  1 - никто не кричал, я всего лишь сказал, что это не говнокод и текущий код может достаточно неплохо, хоть и с издержками, выполнять свою работу.
                  2 - я ненавижу современную молодёжь за: амбиции, безграмотность, не желание думать, и особенно за мат и оскорбления.
                  3 - я не хакер, всего лишь работаю над безопасностью сайтов (за мою жизнь ни один сайт от меня не пострадал).

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

                  FYI mysql_escape_string - это древняя дрянь, которая была заменена на mysql_real_escape_string, а вот последняя не изолирует символ % (с которым такого можно наворотить в умелых руках) и пропускает опасные символы в кодировке BIG5 и GBK.

                  to Vasiliy: спасибо, что хоть Вы подошли взвешено и без оскорблений!

                  PS: сорри, что с другого аккаунта, тот личную почту уж сильно заваливал уведомлениями.
                  Ответить
                  • > PS: сорри, что с другого аккаунта, тот личную почту уж сильно заваливал уведомлениями.

                    Спам фильтр настроить помогает.
                    Ответить
                • хранить HTML в базе данных -- это ужасно!

                  суд я по тому, что Некто минусит нормальные посты и плюсит феерический бред -- Лепросус незримо с нами)
                  Ответить
                  • мало того мне кажется у него как минимум 3-4 аккаунта :)
                    Ответить
                    • Если можно было бы у моего прошлого аккаунта грохнуть почту или удалить его вообще, то было бы уже сделано.
                      FYI test7 единственный свободный, остальные с циферками заняты - придумывать себе ники типа GoodMegaTaklSuperBot желания нет.
                      Ответить
                      • скорее фантазии нет
                        Ответить
                        • Вот за это я и не переношу новое поколение: глупое, амбицильное, недалёкое.
                          Ответить
                          • когда ты уже свалишь? несколько раз сказал что это твой последний пост..
                            Ответить
                            • Меня вот что интересует, что на русском сайте делают выходцы из хохляндии?
                              Вы у себя на Украине ещё не сделали сайт подобной тематике?
                              Ответить
                              • к сожалению нет. может возьметесь? а то мы салоеды никак не сделаем.. наверное из-за отсутствия таких спецов в области безопасного программирования как вы.
                                Ответить
                                • А может сами бы занялись, да и ушли бы с этого сайта?
                                  Куда мне до вас?
                                  Ответить
                                  • ну что вы такое говорите, тут звучали такие громкие слова о том что у вас еще ни один сайт не падал да и умных слов наговорили без единого доказательства того что mysql_real_escape_string хуже чем эти извращенные функции.
                                    --
                                    >да и ушли бы с этого сайта
                                    не вам решать на каком сайте быть. и вы явно не старше меня, ибо переходить на оскорбления типа "выходцы из хохляндии" это удел школоло :)
                                    Ответить
                                    • 1
                                      Ответить
                                      • Уважаемый !
                                        Зачем Вы зарегистрировали семь аккаунтов test1 -- test7, и понаставили себе плюсов?

                                        Вам это не принесет счастья, а базу ГК Вы только что сделали на 7 записей тяжелее.
                                        Ответить
                                        • как зачем? а кто же кроме себя самому себе любимому плюсовый наставит то? скажу на "хохляндском" : Гуртом і батька легше бити :)
                                          Ответить
                                          • Вообще гражданин тролил очень тонко и красиво (я даже в полемику с ним втянулся), и жаль что он так глупо спалился.
                                            Ответить
                              • > ненавижу современную молодёжь за: безграмотность
                                > не сделали сайт подобной тематике?
                                детектед. из под спеллчекера всё равно торчит :-D

                                а ниже нагой лепросус и «амбицилы» (амбициозные имбецилы?)
                                Ответить
                  • Минусовал я и только из под своего прошлого профиля.
                    Пост - бред!
                    "хранить HTML в базе данных -- это ужасно!" - вы это расскажите всем коммерческим CMS, видимо, они получают деньги за ужасные решения.
                    Лепросус больше сюда не нагой, это последний пост, который я комментировал. Тут шайка амбицилов безграмотных тусуется.

                    Да, и маленькие ответики на тему корявости mysql_real_escape_string я дал - читайте остальное сами.
                    Ответить
                    • >>вы это расскажите всем коммерческим CMS
                      к сожалению они не будут меня слушать.
                      Впрочем, работы с prepared statements Вы там тоже скорее всего не найдете. Большинство кода -- ужасно, но речь не об этом.

                      Думаю никто не будет спорить с тем, что в базе надо хранить семантику, а не представление. Потому что если дизайнер захочет изменить внешний вид, то прийдется перелапачивать данные. А это плохо. Хотя смешно говорить про плохие и хорошие решения в мире php.

                      Я Вас спросил без оскорблений: чем этот код лучше mysql_real_escapse_string?

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

                        И я не обзывал, всего лишь констатация: те вещи, которые вы приводили в аргумент - смехотворны, создаётся впечатление, что люди здесь прочитали книгу "Супер программер на PHP" и теперь знают все мировые истины, да и прислушиваться не хотят.
                        Ответить
                        • >> вы не думаете, что началось с вас?
                          не думаю. Я был вежлив, пока на мой простой вопрос не получил презрительнгого ответа "займитесь ликбезом"

                          >>Ответ на mysql_real... см. выше.
                          спасибо

                          >>А по поводу хранения представления в БД - а кто это делает или собирается?
                          HTML это часть представления, если Вы не вкурсе.

                          >>Речь идёт только об форматированном HTML тегами текста
                          На мой взгляд тогда уже надо разрешить группу тэгов (стронг, пре итд) и уж таг script, link и img допускать точно не надо. А если нету тага script, link и img, то нету и кросс-сайт скриптинга. Разве нет?

                          >> те вещи, которые вы приводили в аргумент - смехотворны, создаётся впеч
                          какие именно вещи?
                          Ответить
                      • Да, давайте заканчивать спор, против вас стоит много не читаного материала.
                        Если вы не совсем в теме, то предметного спора всё-равно не будет - лишь оскорбления.
                        Ответить
                        • >>против вас стоит много не читаного материала.
                          ;)))

                          в одном Вы правы -- спор пора заканчивать
                          Ответить
                • И ещё интересно, кто Vasiliy пытается заминусовать?
                  Поведение шакалов...
                  Он, вроде, был на вашей стороне или я ошибаюсь?
                  Ответить
                  • Скорее всего это Вы случайно нажали на "минус" под одним из своих восьми аккаунтов, из под которых Вы довели некоторые свои сообщения до "+5" (что на ГК впринципе редкость, тем более для такой вялой дискуссии).
                    Ответить
                  • отвод глаз от себя хорошая тактика :)
                    Ответить
                    • Вы головой тронулись?
                      Я очень много постов даже не комментирую, просто ставлю баллы за пост и комментарии!
                      Больше занятся не чем, чем создавать себе 5 (как вы говорите) или более аккаунтов и плюсовать и минусовать - я прослежусь сейчас от хохота.
                      Ответить
                      • что что вы сделаете от хохота?
                        Ответить
                        • Придётся ещё и русскому языку учить, ведь у вас теперь только украинский преподают. Да к тому же в ваши то 20 лет, куда знать грамматику?

                          Прослежусь - http://www.vseslova.ru/index.php?dictionary=ushakov&word=prosle jus
                          Ответить
                          • >>не читаного материала.
                            >>Ананимус
                            >>обажаемой
                            ...
                            >>Придётся ещё и русскому языку учить

                            круто
                            Ответить
              • > безграмотные полукровки
                LMAO
                Ответить
      • Поведайте мне, о любезный друг, каким образом замена собачки на сущность спасет Ваш код от SQL инъекции?

        >>, то можно избежать и XSS.
        Ах, я понял, понял. Эта замена еще защищает код от переполнения памяти, ускоряет загрузку в 25% и делает мои волосы на 73.5% более шелковистыми
        Ответить
        • Повторюсь, что лишних замен в этом коде много, реально нужных 6 шт.
          И повторюсь ещё раз - это старый алгоритм (да, он не повысит производительности, да он не вырастит на лысине волос), но его обхода до сих нет.
          Ответить
          • в чем его смысл?
            в замене кавычки?
            Разве не это же самое делает mysql_escape_string? Зачем изобретать велосипед?

            А вообще это все детский сад. Надо использовать prepared statements с параметрами, и SQL инъекция станет немыслима впринципе.

            И расскажите пожалуйста, причем тут XSS?
            Ответить
            • Вы меня совсем не понимаете?
              На тему велосипеда - и да, и нет: код фактически делает экранирование, если много текста, то растёт объём БД и замедляется работа скрипта, но при грамотном использовании этого алгоритма нет возможности провести SQL-инъекций, так же как и XSS (но не на 100%).
              mysql_escape_string - это не панацея!
              Повторюсь ещё раз: это очень старый подход, ОЧЕНЬ!

              По поводу детского сада - соглашусь, как код так и комментаторы - сплошные ясли.
              И снова соглашусь: "Надо использовать prepared statements" - это верный путь!

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

                >> так же как и XSS (но не на 100%
                какое отношение этот алгоритм имеет к кросс-сайт скриптингу?

                >>mysql_escape_string - это не панацея!
                приведите пожалуйста пример ситуации, когда этот чудесный алогоритм поможет, а escape_string не сработает

                >>Повторюсь ещё раз: это очень старый подход, ОЧЕНЬ!
                когда не было prepared statements и mysql_escape_string?

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

                    Вы приходите, и говорите: "у слона три уха".
                    Я спрашиваю Вас: а почему Вы так думаете?
                    А Вы: поищите в Интернете, займитесь ликбезом.

                    Вы кащенит?
                    Ответить
                    • Теперь и вам: тема закрыта.
                      Рассказывать почему я не стану (см. выше).

                      PS: жаргон используйте для пользователей вашего возраста, думаю, GoodTalkBot "кащенит" лучше поймёт.
                      Ответить
              • не верю что mysql_real_escape_string НЕ панацея.
                Ответить
    • мне кажется, что на говнокоде обьявились безумные минусаторы?
      безумные, потому что минусуют только ради минусов
      Ответить
      • я бы даже сказал минусатор, минусет всем кроме leprosus, ему то плюсует :)) негодяй
        Ответить
        • но минусов на коммент больше, чем один. стало быть, минусаторы, или распочковавшийся минусатор
          Ответить
          • не трудно догадаться что у него не один ник для этих целей :))
            Ответить
            • Их было 10:
              от http://govnokod.ru/user/2034 до http://govnokod.ru/user/2044
              Ответить
              • надо нашептать Страйко, что бы майлы должны быть уникальными при реге. Все таки зарегить 10 майлов хлопотней, чем 10 ников на один...
                Ответить
                • Ну они купят домен или зону, и настроят smtp сервак что бы <ЧТО_УГОДНО>@твой.домен.ру шло тебе на почту. И тогда мыл у них будет миллион).

                  Тут нужна эвристика.
                  С одного ip регаешься 10 в течение получаса? Минус один к карме.
                  В одной зоне все почты? еще минус один.

                  Если наберется минус пять -- заморозить IP (или доменную зону в почте) на сутки
                  Ответить
      • да ну, понятно же чего этот поц добивается, плюсану чтоб не утонуло =)
        Ответить

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