[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: getimagesize() - не защита!
Гость Дмитрий
Недавно столкнулся с тем, что для некоторых программистов, разрешивших на своих сайтах загружать картинки, стало откровением, что использование одной лишь функции getimagesize() для отсеивания "некартинок" - это серьезная дыра в безопасности.

Для подтверждения даю ссылку на Архив, в котором находится файл 'troll.php'.
Ф-я getimagesize() определяет данный файл, как jpeg картинку, не смотря на то, что в конце прописан php код, который создает в своем каталоге каталог FUCK_OFF. Кто захочет поэкспериментировать, откройте данный файл в notepad++ и в конце можете дописать какой-угодно скрипт.

Если Вы знаете сайты, написанные не профессионалами и позволяющие загружать аватары, картинки и т.д., можете уже их атаковать.

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



Спустя 7 минут, 12 секунд (30.10.2011 - 19:43) Игорь_Vasinsky написал(а):
А не кто и не настаивал на таком утверждении

1. getimagesize()
2. MIME TYPE
3. обычная проверка на расширение файла
4. наличие всего одной точки в полном имени файла
5. да и регуляркой если не лень

т.е. 3 и 4 - это по сути и есть 5 biggrin.gif

Спустя 3 минуты, 3 секунды (30.10.2011 - 19:46) imbalance_hero написал(а):
Гость Дмитрий
Если ты это к той теме, то там тебе 100 раз повторили одно и то же, надо использовать все вместе, а не что-то одно.

Спустя 6 минут, 29 секунд (30.10.2011 - 19:52) Гость_Дмитрий написал(а):
Цитата
Если ты это к той теме, то там тебе 100 раз повторили одно и то же, надо использовать все вместе, а не что-то одно.

С Вами все ясно smile.gif
Мне хватило Вашего ответа по предыдущей теме.
Какая разница к чему я это? Есть часть программистов, которые реально используют getimagesize() для защиты. Вот будет для них что-то новое. Или цель этого форума - умные фразы с высока, вместо реальных аргументов и примеров кода?

Спустя 2 минуты, 38 секунд (30.10.2011 - 19:55) imbalance_hero написал(а):
Гость_Дмитрий
всё, что ты делал по предыдущей теме - перекручивал мои слова. Когда я сказал, что для защиты стоит ДОБАВИТЬ giz, ты заявил, что giz не поможет, если его использовать без остального, на что тебе заявил другой человек, что надо не только giz, но И(!!!) тип, на что ты ему опять ответил: "тип в еденичном варианте"...
Неадекватное поведение, что ещё можно сказать?

Спустя 1 минута, 41 секунда (30.10.2011 - 19:57) Игорь_Vasinsky написал(а):
Цитата
и примеров кода?

я думаю что прогеры, которые уже обратили внимание на этот вопрос уж в состоянии сами написать эту простую проверку.

Спустя 16 минут, 32 секунды (30.10.2011 - 20:13) imbalance_hero написал(а):
Хотя бы в прикреплённую тему заглянул бы:
Цитата: "Правда и это не панацея, потому что можно оставить в файле нормальный заголовок и все равно напихать мусора или скриптов. При этом будет определен и тип и ширина и MIME. По этому самым радикальным методом проверки является помещение файла в "карантин"(временную директорию) с последующим перемещением его оттуда с помощью графической библиотеки. Если библиотека не справится с файлом, знать он не картинка."
И тип, и ширину, и MIME, все 3 вещи вместе. Вот ссылка: http://phpforum.ru/index.php?showtopic=21213

Спустя 22 минуты, 1 секунда (30.10.2011 - 20:35) Гость_Дмитрий написал(а):
Цитата
Хотя бы в прикреплённую тему заглянул бы

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

Я на данный форум зашел первый раз пару дней назад. Увидел в парочке тем явно вредные советы, написал по поводу них. Во время обсуждения одного из них посыпались фразы, что "невозможно заставить сервер запустить php код в файле с картинкой", "Это очень геморно", "Было актуально много лет назад". Я проверил, работает отлично. Выложил готовый пример. Вот собственно и все.

Спустя 11 минут, 33 секунды (30.10.2011 - 20:47) Гость_Дмитрий написал(а):
Цитата
всё, что ты делал по предыдущей теме - перекручивал мои слова. Когда я сказал, что для защиты стоит ДОБАВИТЬ giz, ты заявил, что giz не поможет, если его использовать без остального, на что тебе заявил другой человек, что надо не только giz, но И(!!!) тип, на что ты ему опять ответил: "тип в еденичном варианте"...
Неадекватное поведение, что ещё можно сказать?

Вы меня с кем-то путаете. Все, что я хотел донести до товарища vital, что если юзер обойдет getExtension и getimagesize, то проверка передаваемого в заголовках mime типа не даст абсолютно ничего. Я и пример на что похожа такая проверка приводил.

Спустя 31 секунда (30.10.2011 - 20:47) Invis1ble написал(а):
Гость_Дмитрий
Твой пример работает, если только картинку не ресайзить и не менять расширение с php на расширение картинки. А так да.
Собственно, я не считаю твой пост бесполезным. И даже плюсанул бы тебе карму - но ты не зареган smile.gif

Спустя 5 минут, 35 секунд (30.10.2011 - 20:53) Гость_Дмитрий написал(а):
Цитата
Твой пример работает, если только картинку не ресайзить и не менять расширение с php на расширение картинки. А так да.

Это да. Тут фишка в том, что если расширение поменять на jpeg, то php код будет проигнорирован сервером и выведется картинка. smile.gif
Цитата
Собственно, я не считаю твой пост бесполезным. И даже плюсанул бы тебе карму - но ты не зареган

Спасибо! smile.gif

Спустя 5 минут, 4 секунды (30.10.2011 - 20:58) killer8080 написал(а):
Цитата (Гость Дмитрий @ 30.10.2011 - 19:36)
Для подтверждения даю ссылку на Архив, в котором находится файл 'troll.php'.

Ну и? Где там обещанный файл? По той ссылке что ты дал, селф экстракт с какой то инсталяхой blink.gif

Спустя 3 минуты, 11 секунд (30.10.2011 - 21:01) Гость_Дмитрий написал(а):
Цитата
Ну и? Где там обещанный файл? По той ссылке что ты дал, селф экстракт с какой то инсталяхой

blink.gif
Там архив под названием jpg_attack.rar. Внутри один файл - troll.php

Спустя 16 секунд (30.10.2011 - 21:01) Invis1ble написал(а):
killer8080
Цитата
Ну и? Где там обещанный файл? По той ссылке что ты дал, селф экстракт с какой то инсталяхой

ты что-то не то качаешь, там rar-архив с картинкой

Спустя 4 минуты, 16 секунд (30.10.2011 - 21:06) killer8080 написал(а):
Да да разобрался уже, сейчас попробую smile.gif

Спустя 4 минуты, 57 секунд (30.10.2011 - 21:11) Invis1ble написал(а):
Гость Дмитрий
Интересует вот что - где ты эту картинку надыбал? Или сам подредактировал имеющуюся?

Спустя 8 минут, 30 секунд (30.10.2011 - 21:19) Гость_Дмитрий написал(а):
Цитата
Интересует вот что - где ты эту картинку надыбал? Или сам подредактировал имеющуюся?

Как я это делал:
1. Взял первую попавшуюся картинку с рабочего стола
2. Переименовал в php.
3. Открыл через notepad++ (советую открывать именно им, а то ide запорола файл).
4. Заменил все символы '%', что бы не было ASP подобных тэгов <%
5. Заменил все символы '?', что бы не было тэгов <?

После этого в конец файла начал писать код smile.gif

Спустя 2 минуты, 46 секунд (30.10.2011 - 21:22) Invis1ble написал(а):
Ясно. У меня кстати IDE не запорола (NetBeans), но когда удалил код в надежде получить "чистую" картинку - она запоролась.

Спустя 1 минута, 8 секунд (30.10.2011 - 21:23) Игорь_Vasinsky написал(а):
чему вот вы людей учите??? ph34r.gif

Спустя 2 минуты, 47 секунд (30.10.2011 - 21:26) Invis1ble написал(а):
Игорь_Vasinsky
Все в пределах разумного, во-первых - это не уникальная инфа - кому "надо" - найдет итак,
во-вторых, это непосредственно относится к безопасности. Чтобы знать как защититься - нужно знать приемы атак.

Спустя 2 минуты, 3 секунды (30.10.2011 - 21:28) Гость_Дмитрий написал(а):
Цитата
чему вот вы людей учите???

Игорь, прочитав Вашу статью в журнале под названием "Загрузка картинки для определённого юзера БД", которую Вы порекомендовали начинающему, хочется спросить Вас тоже самое?

Спустя 1 час, 27 минут, 5 секунд (30.10.2011 - 22:55) bodja написал(а):
Ну то что ,можно внедрять скрипт в картинку - это уже давно не новость.
Здесь есть две проблемы,нужно изменить расширение и дать права на выполнение файлу.
А для этого нужно стырить пароли фтп,если сайт не позволяет работать с файлами и менять права папкам,то тут даже админские пароли не помогут.
Короче- геморно это сильно и годится для совсем дырявых сайтов.

Спустя 1 день, 5 часов, 16 минут, 49 секунд (1.11.2011 - 04:12) Гость_Дмитрий написал(а):
Цитата
И я не говорил, что твой пост плохой

Судя по фразе: "тебе 100 раз повторили одно и то же" ты имел ввиду ответы пользователя vital, который доказывал, что при загрузке картинок, кроме getExtension и getimagesize нужно отдельная проверка mime type. Сможешь адекватно, одним сообщением, привести пример ситуации, когда это нужно для безопасности (или хотя бы для удобства)?
Я не пытаюсь тролить. Я реально считаю это проверкой из разряда:

if(isset($var) && !empty($var) && $var != '') //3-е условие лишнее
{...}


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

Спустя 22 минуты, 25 секунд (1.11.2011 - 04:34) Гость Дмитрий написал(а):
Код в предыдущем сообщении - метафорический.
В 99% случаев хватает функции empty()

Спустя 15 часов, 16 минут, 57 секунд (1.11.2011 - 19:51) imbalance_hero написал(а):
Гость_Дмитрий
Я с кем хочу общаться, с тем и общаюсь, а с неадекватными вроде тебя даже гадко начинать. Если в языке твоём гниль, в характере поселился таракан, то будь ты в 1000 раз умнее, что по тебе не скажешь, желание общаться отпадает!


 ! 

М
Выводы ты не делаешь, как я вижу. Мое терпение на пределе. Еще один подобный выпад и будет совсем другой разговор.
twin
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.