Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > HTTP сервера > Что-то вроде bug report |
Автор: Рысь 26.01.07, 14:36 |
Сюда скидываем следующее: 1. Описание дырки 2. Способы устранения/минимизации последствий/защиты. Перед постом обязательно почитать BugTrack соответствующего языка. Если соберетесь публиковать эксплойт (рабочий код), то лучше скиньте его сначала мне. Во избежание, так сказать. |
Автор: Pr0[)!9Y 26.01.07, 16:54 |
Недостаточная проверка данных при использовании функции getimagesize(). Язык: PHP 4/5 Источник: прверка рисунка на вшивость Классификация: выполнение произвольного кода Функция: getimagesize() Описание: Функция getimagesize не совсем корректно обрабатывает графические файлы, проверка осуществляется на основе начала файла (содержащего служебную информацию) к тому же независимо от расширения файла. Существует возможность дописать в конец файла произвольный PHP код. При этом изображение будет распознано как корректное. Опасность заключается в том, что проверка загруженных графических файлов на основе одной лишь функции getimagesize позволяет закачать любой PHP файл. Пример: Любое GIF изображение открывается каким либо текстовым редактором, в конец дописывается PHP код, файл переименовывается в somefile.php и закачивается на сервер, при недостаточной проверке данных файл окажется загруженным с расширением PHP, что позволит его исполнить. Защита: Дополнительно проверять входные файлы на корректность имени. Один из вариантов: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> PS:if(preg_match('/\.(gif|png|jpg|jpeg)$/i',$_FILES['userfile']['name'])){ //Необходимые операции } Пост призван указать на аккуратность использования этой функции, а не на её неверность. |
Автор: Miscђka 26.01.07, 18:19 |
А кто сказал, что getimagesize() должна проверять вшивость картинки? Она возвращает размер и предполагаемый тип. Баг или дыра в данном случае не в языке, а в программисте, который использует эту функцию не по назначению. |
Автор: Рысь 26.01.07, 20:12 |
поставила на отложенное удаление все, кроме поста Pr0[)!9Y и замечания от Miscђka ЗЫ: предложения по названию принимаются... Добавлено И еще для размышления: Цитата nerezus @ Защита: исправить регэксп на /^[^.]+\.(gif|png|jpg|jpeg)$/i Далеко ходить не надо: файл с именем blah.ext1.ext2, где в апаче не зарегана ext2, будет работать так, как будто .ext2 в имени нету. Например blah.php.lol будет обработан хендлером для пхп. |
Автор: nerezus 04.02.07, 09:10 |
Цитата Ну это немного не то.Защита: исправить регэксп на /^[^.]+\.(gif|png|jpg|jpeg)$/i Для закачек: либо давать закачивать файлы только с определенными расширениями(т.е. все, что не разрешено - запрещено), либо менять имена файлов при закачке. Однако даже если есть возможность закачать картинку, то в нее можно запихать свой код(поэтому некоторые движки держат картинки/аватары в базе). И если движок содержит локальный инклюд, то.... можно сказать, что инклюд становится нелокальным =) Таким образом, к примеру, была поломана mazafaka.ru Сообщения были разделены в тему "проверка данных при использовании функции getimagesize()" |
Автор: lyubchick 31.05.08, 06:49 |
Здравствуйте, у меня проблема: Я создаю папки которые были с помощью Php <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> mkdir($_SERVER['DOCUMENT_ROOT']."/galerypath/".$newMenuItem_path, 0777); Вот папки которые таким образом создаются, они имеют следующие параметры: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> drwxrwxrwx 8 hostnam hostnam 4096 May 31 09:27 . drwxr-xr-x 18 hostnam hostnam 4096 May 30 10:26 .. drwxr-xr-x 3 99 99 4096 May 29 12:16 ..odnotonni1 drwxr-xr-x 3 99 99 4096 May 29 14:43 1111 drwxr-xr-x 3 99 99 4096 May 30 09:54 odnoton drwxr-xr-x 3 99 99 4096 May 29 12:25 odnotonni drwxrwxrwx 3 hostnam hostnam 4096 May 29 15:16 odton drwxr-xr-x 3 99 99 4096 May 29 12:26 ondnotonni Папка odton была создана через фтп. С ней все нормально. Но другие папки были созданы через php команду. К эитм папкам созданым програмным путем из скриптов есть доступ (то есть я могу сохранять и удалять внутри их файлы). К тем же папкам нет доступа по фтп. То есть я не могу изменять их параметры (доступ на запись и т.д.). И самое главное: Я не могу из фтп сохранить в них файлы. Не могу также по фтп удалить эти папки и удалить файлы из них. |
Автор: seelts 31.05.08, 09:19 |
Давно не общался с никсами, но что-то ещё помню... rwxr-xr-x владелец может всё, остальные только читать и исполнять ... владельцы у odton'а и остальных папок - разные пользователи, потому что пхп и фтп сервера (или правильнее сказать "демоны"? поправьте плиз) запускаются от разных пользователей... отсюда и все неурядицы... .... вобщето в баг репорт имхо неверно писать это... где здесь ПХПшный баг? |
Автор: Pr0[)!9Y 31.05.08, 14:22 |
lyubchick, бывает такое. Не разбирался с чем это связано, но указание прав при создании у меня что-то тоже не всегда работает. Вообщем так: 1) попробуй chmod 2) umask(0000); Добавлено А тема действительно должна быть отдельной, по крайней мере до выяснения. |
Автор: Axis 03.06.08, 03:17 |
В данном случае просто фтп сервер сохраняет файлы от одного пользователя, веб сервер от того под которым запущен, вот они и ставят влядельцев так. Высталяй права, а так как группы разные, то надо выставлять полные права, что совсем не безопасно, можно использовать chown для смены владельца. Но это может сделать только владелец или рут. |