На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
Закрыто Soul :) 17-10-2007: По просьбе автора

Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
  • закрыта
> проверка данных при использовании функции getimagesize()
    скажите подалуйста, можно с примером:) ну закачал ко мне юзер такую gif, а дальше то что? все равно апач отправит клиенту html, с самим то изображением не работают. Не пойму, где подвох... Выполнить скрипт тоже не получится, ведь служебная инфа в начале файла отобъет все желание у интепритатора, да и можно настроить пхп чтоб он из этой папки ничего не выполнял...

    Эта тема была разделена из темы "Что-то вроде bug report"
      Цитата antonn @
      Выполнить скрипт тоже не получится, ведь служебная инфа в начале файла отобъет все желание у интепритатора
      Проверял? :rolleyes: Нисколько не отобъет, читай внимательней.
      Цитата antonn @
      можно настроить пхп чтоб он из этой папки ничего не выполнял...
      Много чего настроить можно, например проверку расширений, об этом и говорится, что нужны дополнительные средства защиты.
      Цитата antonn @
      все равно апач отправит клиенту html, с самим то изображением не работают.
      Причем тут хтмл, будет запрос на картинку, выполнится код и всего то.
        Pr0[)!9Y
        так ведь пхп выполняет код в .php, а остальные расширения отдает как текст (ну смотря что поставить). вот это то я проверял, потому и спрашиваю, где бага то...

        Цитата
        Причем тут хтмл, будет запрос на картинку, выполнится код и всего то.

        запрос на картинку будет у апача, чего бы он отдал файл на выполнение пхп? заголовок "картиночный", расширение тоже...
          Цитата Pr0[)!9Y @
          Опасность заключается в том, что проверка загруженных графических файлов на основе одной лишь функции getimagesize позволяет закачать любой PHP файл.
          Расширение надо проверять, о чем и вся тема, а закачать можно любой файл.
            расширение говорит лишь о том, какую программу запускать при двойном клике на иконке файла.
            можно при закачке проверять на вшивость картинки:)
            ExpandedWrap disabled
              function verify_image($file) {
                  $txt = html_entity_decode(file_get_contents($file), ENT_QUOTES);
                  $image_safe = true;
                  if (preg_match("#&\#x([0-9a-f]+);*#i", $txt)) $image_safe = false;
                  if (preg_match('#&\#([0-9]+);*#i', $txt)) $image_safe = false;
                  if (preg_match("#([a-z]*)=([\`\'\"]*)script:#iU", $txt)) $image_safe = false;
                  if (preg_match("#([a-z]*)=([\`\'\"]*)javascript:#iU", $txt)) $image_safe = false;
                  if (preg_match("#([a-z]*)=([\'\"]*)vbscript:#iU", $txt)) $image_safe = false;
                  if (preg_match("#(<[^>]+)style=([\`\'\"]*).*expression\([^>]*>#iU", $txt)) $image_safe = false;
                  if (preg_match("#(<[^>]+)style=([\`\'\"]*).*behaviour\([^>]*>#iU", $txt)) $image_safe = false;
                  if (preg_match("#</*(applet|link|style|script|iframe|frame|frameset)[^>]*>#i", $txt)) $image_safe = false;
                  return $image_safe;
              }

            (с) ПХП-Фьюжн :)
              Товарищи модеры, почистите все наверно.

              antonn, чего ты доказываешь непонятно? Мы об одном и том же говорим. Да можно(и нужно) проверять расширения, никто этого не отрицает. Все вышесказанное обозначает что функции getimagesize недостаточно для проверки входных данных, и не более. Что ты доказываешь? Надеюсь все почистят, с вопросами обращайся в приват. Хватит тему засорять.
                Цитата
                Что ты доказываешь?

                Я предлагаю. Там чуть выше поста есть немножко кода, можно пообсуждать его, на предмет проверки вшивости картики в контексте недостаточности проверки функцией getimagesize() и расширения закачиваемого файла...

                ЗЫ а вообще я просил объяснить, в чем хак заключался, и, если честно, так и не понял...
                Сообщение отредактировано: antonn -
                  Цитата antonn @
                  а вообще я просил объяснить, в чем хак заключался, и, если честно, так и не понял...
                  В том, что залить могут ЛЮБОЙ файл, и даже с расширением PHP. Естесственно, при проверке такой "картинки" получим в худшем случае дефейс.
                  Я бы всё же сказал, что уязвимость не в getimagesize (она выполняет именно то, чего от неё добиваются) - уязвимость в головах. Находятся идиоты, которые делают include $image вместо вывода банальной ссылки на картинку - объявим функцию include уязвимой?
                  Цитата antonn @
                  Там чуть выше поста есть немножко кода, можно пообсуждать его, на предмет проверки вшивости картики в контексте недостаточности проверки функцией getimagesize() и расширения закачиваемого файла...
                  Функция - бред воспалённого разума.

                  Добавлено
                  Цитата Pr0[)!9Y @
                  Мы об одном и том же говорим.
                  Да нифига не об одном и том же.
                  Цитата Pr0[)!9Y @
                  Да можно(и нужно) проверять расширения, никто этого не отрицает.
                  Отрицает он это или нет, но приведённый им код никакого отношения к проверке расширения не имеет.
                    ИМХО, если работать на ПХП - то лучшего для работы с графикой чем IMagick (MagickWand) ещё не придумано (Её identify уж точно прально отличит картинку от бредоносного кода)
                    Правда пока не знаю, часто ли эта радость у масс-хостеров стоИт.

                    ЗЫ. а насчет проверок на тип данных: почему никто про mime-types не вспомнил..? проверка конечно не стопроцентная, но доверия должна вызывать не меньше, чем правильный екстеншн.
                      SiMM
                      Цитата
                      В том, что залить могут ЛЮБОЙ файл, и даже с расширением PHP. Естесственно, при проверке такой "картинки" получим в худшем случае дефейс.

                      спасибо, мне уже объяснили, я просто даже не представил, что валидность картинки проверяют через getimagesize().
                      Цитата
                      Функция - бред воспалённого разума.

                      Ишо как воспаленного...
                        Цитата Asthma @
                        ИМХО, если работать на ПХП - то лучшего для работы с графикой чем IMagick (MagickWand) ещё не придумано (Её identify уж точно прально отличит картинку от бредоносного кода)
                        Ничего она не отличит, да и совершенно бесполезна, если речь лишь о том, чтобы вместо залитой картинки не выполнился код.
                          Цитата SiMM

                          Ничего она не отличит

                          ну-ну...
                          Цитата SiMM

                          о том, чтобы вместо залитой картинки не выполнился код

                          Приведите, пожалуйста пример файла отвечающего этим двум критериям:
                          • Идентифай скажет, что это _валидная_ картинка (соответствие майм-тайпу, правильный-читаемый контент)
                          • ПХП распарсит его без ошибок ( все что внутри "<?php ... ?>" - ПХП код )
                            Цитата Asthma @
                            Идентифай скажет, что это _валидная_ картинка (соответствие майм-тайпу, правильный-читаемый контент)
                            Это Вы о чём, батенька? Ваш "идентифай", если речь о verify_image, лает даже на валидные картинки, при этом не замечая "невалидных".

                            Пример номер раз. Картинка, которая функцией verify_image вполне считается допустимой, однако стоит дать ей расширение php и положить на сервер - и она выдаст результат phpinfo
                            http://img80.imageshack.us/img80/7313/av56517vx4.jpg

                            Пример номер два. Картинка, которая функцией verify_image считается невалидной без каких либо на то оснований.
                            http://img84.imageshack.us/img84/5640/av56517lw8.jpg

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

                            Добавлено
                            Кстати второй пример - ещё большая жопа для пользователей. Потому что у него не должна болеть голова о том, насколько криворук вэбмастер и почему заливая свою любимую картинку вот уже в сотый раз вэбсервер отказывает её сохранять.
                              SiMM
                              а как через av56517vx4.jpg вывести это phpinfo? мне показывает просто картинку...
                              у меня пропускает обе...
                              Сообщение отредактировано: antonn -
                                Цитата antonn @
                                а как через av56517vx4.jpg вывести это phpinfo?


                                Цитата SiMM @
                                однако стоит дать ей расширение php и положить на сервер - и она выдаст результат phpinfo
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все
                                Закрыто Soul :) 17-10-2007: По просьбе автора



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0373 ]   [ 14 queries used ]   [ Generated: 8.11.24, 23:35 GMT ]