
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
скажите подалуйста, можно с примером:) ну закачал ко мне юзер такую gif, а дальше то что? все равно апач отправит клиенту html, с самим то изображением не работают. Не пойму, где подвох... Выполнить скрипт тоже не получится, ведь служебная инфа в начале файла отобъет все желание у интепритатора, да и можно настроить пхп чтоб он из этой папки ничего не выполнял...
Эта тема была разделена из темы "Что-то вроде bug report" |
Сообщ.
#2
,
|
|
|
Цитата antonn @ Проверял? Выполнить скрипт тоже не получится, ведь служебная инфа в начале файла отобъет все желание у интепритатора ![]() Цитата antonn @ Много чего настроить можно, например проверку расширений, об этом и говорится, что нужны дополнительные средства защиты.можно настроить пхп чтоб он из этой папки ничего не выполнял... Цитата antonn @ Причем тут хтмл, будет запрос на картинку, выполнится код и всего то. все равно апач отправит клиенту html, с самим то изображением не работают. |
Сообщ.
#3
,
|
|
|
Pr0[)!9Y
так ведь пхп выполняет код в .php, а остальные расширения отдает как текст (ну смотря что поставить). вот это то я проверял, потому и спрашиваю, где бага то... Цитата Причем тут хтмл, будет запрос на картинку, выполнится код и всего то. запрос на картинку будет у апача, чего бы он отдал файл на выполнение пхп? заголовок "картиночный", расширение тоже... |
Сообщ.
#4
,
|
|
|
Цитата Pr0[)!9Y @ Расширение надо проверять, о чем и вся тема, а закачать можно любой файл. Опасность заключается в том, что проверка загруженных графических файлов на основе одной лишь функции getimagesize позволяет закачать любой PHP файл. |
Сообщ.
#5
,
|
|
|
расширение говорит лишь о том, какую программу запускать при двойном клике на иконке файла.
можно при закачке проверять на вшивость картинки:) ![]() ![]() 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; } (с) ПХП-Фьюжн ![]() |
Сообщ.
#6
,
|
|
|
Товарищи модеры, почистите все наверно.
antonn, чего ты доказываешь непонятно? Мы об одном и том же говорим. Да можно(и нужно) проверять расширения, никто этого не отрицает. Все вышесказанное обозначает что функции getimagesize недостаточно для проверки входных данных, и не более. Что ты доказываешь? Надеюсь все почистят, с вопросами обращайся в приват. Хватит тему засорять. |
Сообщ.
#7
,
|
|
|
Цитата Что ты доказываешь? Я предлагаю. Там чуть выше поста есть немножко кода, можно пообсуждать его, на предмет проверки вшивости картики в контексте недостаточности проверки функцией getimagesize() и расширения закачиваемого файла... ЗЫ а вообще я просил объяснить, в чем хак заключался, и, если честно, так и не понял... |
Сообщ.
#8
,
|
|
|
Цитата antonn @ В том, что залить могут ЛЮБОЙ файл, и даже с расширением PHP. Естесственно, при проверке такой "картинки" получим в худшем случае дефейс.а вообще я просил объяснить, в чем хак заключался, и, если честно, так и не понял... Я бы всё же сказал, что уязвимость не в getimagesize (она выполняет именно то, чего от неё добиваются) - уязвимость в головах. Находятся идиоты, которые делают include $image вместо вывода банальной ссылки на картинку - объявим функцию include уязвимой? Цитата antonn @ Функция - бред воспалённого разума. Там чуть выше поста есть немножко кода, можно пообсуждать его, на предмет проверки вшивости картики в контексте недостаточности проверки функцией getimagesize() и расширения закачиваемого файла... Добавлено Цитата Pr0[)!9Y @ Да нифига не об одном и том же.Мы об одном и том же говорим. Цитата Pr0[)!9Y @ Отрицает он это или нет, но приведённый им код никакого отношения к проверке расширения не имеет. Да можно(и нужно) проверять расширения, никто этого не отрицает. |
Сообщ.
#9
,
|
|
|
ИМХО, если работать на ПХП - то лучшего для работы с графикой чем IMagick (MagickWand) ещё не придумано (Её identify уж точно прально отличит картинку от бредоносного кода)
Правда пока не знаю, часто ли эта радость у масс-хостеров стоИт. ЗЫ. а насчет проверок на тип данных: почему никто про mime-types не вспомнил..? проверка конечно не стопроцентная, но доверия должна вызывать не меньше, чем правильный екстеншн. |
Сообщ.
#10
,
|
|
|
SiMM
Цитата В том, что залить могут ЛЮБОЙ файл, и даже с расширением PHP. Естесственно, при проверке такой "картинки" получим в худшем случае дефейс. спасибо, мне уже объяснили, я просто даже не представил, что валидность картинки проверяют через getimagesize(). Цитата Функция - бред воспалённого разума. Ишо как воспаленного... |
Сообщ.
#11
,
|
|
|
Цитата Asthma @ Ничего она не отличит, да и совершенно бесполезна, если речь лишь о том, чтобы вместо залитой картинки не выполнился код. ИМХО, если работать на ПХП - то лучшего для работы с графикой чем IMagick (MagickWand) ещё не придумано (Её identify уж точно прально отличит картинку от бредоносного кода) |
Сообщ.
#12
,
|
|
|
Цитата SiMM Ничего она не отличит ну-ну... Цитата SiMM о том, чтобы вместо залитой картинки не выполнился код Приведите, пожалуйста пример файла отвечающего этим двум критериям: |
Сообщ.
#13
,
|
|
|
Цитата 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 На самом деле никаких невалидных картинок не бывает - бывают кривые руки программистов, которые позволяют выполнять на сервере код, чего позволять не должни. И содерижимое самих файлов при этом не имеет никакого значения. Добавлено Кстати второй пример - ещё большая жопа для пользователей. Потому что у него не должна болеть голова о том, насколько криворук вэбмастер и почему заливая свою любимую картинку вот уже в сотый раз вэбсервер отказывает её сохранять. |
Сообщ.
#14
,
|
|
|
SiMM
а как через av56517vx4.jpg вывести это phpinfo? мне показывает просто картинку... у меня пропускает обе... |
Сообщ.
#15
,
|
|
|
Цитата antonn @ а как через av56517vx4.jpg вывести это phpinfo? Цитата SiMM @ однако стоит дать ей расширение php и положить на сервер - и она выдаст результат phpinfo |
Сообщ.
#16
,
|
|
|
Цитата antonn @ Сохранить как + смотреть любым текстовым или hex-редактором.а как через av56517vx4.jpg вывести это phpinfo? мне показывает просто картинку... Цитата antonn @ Нет, не спутаны.картинки не спутаны? ![]() ![]() <?php // test.php function verify_image($file) { ... } // код см. выше var_dump(verify_image('http://img80.imageshack.us/img80/7313/av56517vx4.jpg')); var_dump(verify_image('http://img84.imageshack.us/img84/5640/av56517lw8.jpg')); eval('?>'.file_get_contents('http://img80.imageshack.us/img80/7313/av56517vx4.jpg')); ?> ![]() ![]() > php -q test.php bool(true) bool(false) ╪ э 2Photoshop 3.0 8BIM♦♦ ▬∟☻t ◄phpinfo() PHP Version => ... |
Сообщ.
#17
,
|
|
|
Demon_id
Умно. Всего навсего выложить на сервер с расширением php... мелочи, как два пальца.. Я уже сам допер, что если ее проинклудить, то выполнится. Осталось понять, кому придет в голову инклудить картинки (тот факт, что некоторые не проверяют get-post и инклудят из него, во внимание не принимаю в связи с его полнейшим идиотством). Кстати, вопрос по той же части, как запретить выполенение скрипта в определенной папке? Не вызов его напрямую, а обычный инклуд из скрипта в корне. Пусть выводится как текст, но не выполняется. |
Сообщ.
#18
,
|
|
|
Цитата antonn @ Инклудить необязательно - достаточно залить файл с расширением php через форму - если файл в итоге окажется в доступном для запуска php-скриптов месте, а расширение так же останется php - выполнить его - труда не составит. Как видите, всякие функции проверки валидности содержимого файла - совершенно бесполезны.Я уже сам допер, что если ее проинклудить, то выполнится. Осталось понять, кому придет в голову инклудить картинки (тот факт, что некоторые не проверяют get-post и инклудят из него, во внимание не принимаю в связи с его полнейшим идиотством). Цитата antonn @ Если речь о PHP - тоКстати, вопрос по той же части, как запретить выполенение скрипта в определенной папке? php_value engine Off если я не ошибаюсь. Цитата antonn @ Не надо инклудить то, что заливается пользователями. Никогда. В этом нет никакой необходимости. Не вызов его напрямую, а обычный инклуд из скрипта в корне. Добавлено Похоже, не ошибаюсь. http://www.php.net/manual/en/ref.apache.php#ini.engine Цитата SiMM @ А для вывода файлов пользователя существуют предназначенные для этого функции - include для этого не предназначен. Не надо инклудить то, что заливается пользователями. Никогда. В этом нет никакой необходимости. |
Сообщ.
#19
,
|
|
|
если на сервер можно залить файл с расширением, которое выполняет php, и в этой папке есть возможность вызова скрипта - это значит что писавший данный скрипт либо начинающий, либо дурак, настолько банальные факторы я в расчет не беру. Предполагается, что человек хотя бы через htaccess закрыл выполнение скрипта в папке.
Кстати, verify_image пропустила обе картинки... ![]() php_value engine Off - это в htaccess? пойду поищу.. Цитата Не надо инклудить то, что заливается пользователями. Никогда. В этом нет никакой необходимости. да ну? а я думал можно. И спросил совсем не из интереса и желания что то узнать, просто кисти рук разминаю, всякую фигню набираю... ![]() хм, php_flag engine off и все равно инклудящийся файл выполняется. Но у меня 5 версия, от этого не зависит? |
Сообщ.
#20
,
|
|
|
Цитата antonn @ Можно, но не нужно. Для вывода файла например есть http://php.net/readfile да ну? а я думал можно. Добавлено Цитата antonn @ хм, php_flag engine off и все равно инклудящийся файл выполняется. Объясни каким образом может так получится что ты будешь инклюдить картинку? Если уж так надо, смотри выше. |
Сообщ.
#21
,
|
|
|
Причем тут инклуд картинки, мне просто интересно, можно ли запретить вообще запретить выполнять скрипты, лежащие в определенной папке. Будут они вызваны напрямую или проинклудятся - не важно.
в htaccess php_flag engine off - выполняются проинклуженные ![]() |
Сообщ.
#22
,
|
|
|
Цитата antonn @ Нутк естественно, выполняется с помощью инклюда все что можно прочесть(включая хттп). в htaccess php_flag engine off - выполняются проинклуженные |
Сообщ.
#23
,
|
|
|
Цитата antonn @ К сожалению, этот либо начинающий, либо дурак, чаще всего считает себя далеко неначинающим и не дураком если на сервер можно залить файл с расширением, которое выполняет php, и в этой папке есть возможность вызова скрипта - это значит что писавший данный скрипт либо начинающий, либо дурак ![]() ![]() Цитата antonn @ Проверил - работает. Правда проверял под php модулем, возможно, в CGI это работать не будет.хм, php_flag engine off и все равно инклудящийся файл выполняется. Но у меня 5 версия, от этого не зависит? Цитата antonn @ [telepat mode]Кстати, verify_image пропустила обе картинки... ![]() ![]() error_reporting(E_ALL); [/telepat mode] |
Сообщ.
#24
,
|
|
|
Хотя имхо вообще странный вопрос, ты же должен знать что, когдаб откуда и зачем инклюдишь
|
Сообщ.
#25
,
|
|
|
Цитата antonn @ Вообще-то файл должен называться .htaccess, а не htaccess. в htaccess |
Сообщ.
#26
,
|
|
|
Цитата SiMM @ Правда проверял под php модулем, возможно, в CGI это работать не будет. http://www.php.net/manual/en/configuration.changes.php#configuration.changes.apache судя по ссылке, не возможно, а точно действовать не будет. |
Сообщ.
#27
,
|
|
|
Цитата Нутк естественно, выполняется с помощью инклюда все что можно прочесть(включая хттп). воот, мне то как раз и хотелось знать, воможно это или нет ![]() cgi не трогаю. Цитата Хотя имхо вообще странный вопрос, ты же должен знать что, когдаб откуда и зачем инклюдишь блин, ну интересно стало, чего плохого? ![]() ![]() Цитата Вообще-то файл должен называться .htaccess, а не htaccess. я думаю, что мы поняли о каком файле идет речь? ![]() |
Сообщ.
#28
,
|
|
|
Цитата antonn @ Вообще-то если у Вас не работает - описывать свои действия надо максимально точно, а не так, чтобы люди догадывались, что Вы имеете в виду. я думаю, что мы поняли о каком файле идет речь? Добавлено Цитата antonn @ Где лежит мануал, думаю, Вам известно - не нашли такой функциональности - значит, нельзя. Ну вот интересно стало, могу ли я запретить любое выполение из определенной папки |
Сообщ.
#29
,
|
|
|
Цитата Вообще-то если у Вас не работает - описывать свои действия надо максимально точно, а не так, чтобы люди догадывались, что Вы имеете в виду. странно, о каком еще файле можно было подумать? Цитата Где лежит мануал, думаю, Вам известно - не нашли такой функциональности - значит, нельзя. с таким подходом и форум не нужен, есть мануал... |
Сообщ.
#30
,
|
|
|
Цитата antonn @ А почему Вы думаете, что кто-то будет за Вас искать нужный Вам функционал, который никому, кроме Вас, не нужен? с таким подходом и форум не нужен, есть мануал... |
Сообщ.
#31
,
|
|
|
Я никого не заставляю искать мне документацию. Так же на это сообщение не обязательно отвечать, но если есть желание, можно попинать друг друга еще
![]() |