валидация картинки

mcfalu

Новичок
валидация картинки

проверить является файл картинкой можно в несколько этапов:
1. по расширению
2. по mime типу

кроме того, можно несколько нашаманив дописать в файл-картинку некий дополнительный код(инклуд). И первые 2 пункты лего обходятся.

По поиску пробил, вроде не нашел ответ. Вопрос - как правильно проверять является-ли файл картинкой, чтобы внутри не было никакого инклуда?

можно пробывать ресайзнуть, если не можно - значит не картинка. Но может есть какие-то более правильные решения?
 

fixxxer

К.О.
Партнер клуба
если getimagesize срабатывает то картинка. ну и сохранять под своим именем (если исходное представляет ценность храни его в базе в какомнить поле).

а чего там дописано не пофигу ли? ты же *.jpg не собираешься через интерпретатор php прогонять?
 

mcfalu

Новичок
Автор оригинала: fixxxer
если getimagesize срабатывает то картинка. ну и сохранять под своим именем (если исходное представляет ценность храни его в базе в какомнить поле).

а чего там дописано не пофигу ли? ты же *.jpg не собираешься через интерпретатор php прогонять?
как показывают некоторые тесты - даже с инклудом getimagesize возвращается корректные данные, при этом ресайзнуть эту картинку не можно
по поводу - что там дописано. Тут больше стоит вопрос - как сделать так, чтобы только чистые файлы грузить.
 

Fortop

Новичок
Тут больше стоит вопрос - как сделать так, чтобы только чистые файлы грузить.
Не заливать "грязные" - логично?

Если дописанные данные никак не скажутся на работоспособности изображения - то не плевать ли, что там дописано?
 

Духовность™

Продвинутый новичок
в директорию с загружаемыми файлами кладем htaccess с содержимым: php_flag engine off

как показывают некоторые тесты - даже с инклудом getimagesize возвращается корректные данные, при этом ресайзнуть эту картинку не можно
а что за тесты и каковы результаты?
 

mity

Новичок
Если Вы хотите быть точно уверенны в том что картинка не содержит каких либо посторонних элементов то её лучше всего пересохранить, внеся изменения хотя бы в один пиксель, используя например модуль gd2.
При этом конечно качество картинки чуть ухудшится.

Если пересохранение недопустимо, то необходимо изучить формат картинок JPG GIF и тд. Открывать каждую картинку в PHP(он прекрасно работает с бинарными данными) или в сторонней программе и досконально проверять формат файла.

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

mcfalu

Новичок
Автор оригинала: triumvirat

а что за тесты и каковы результаты?
открыл изображение через винхекс, дописал в конец дополнительный текст(пхп скрипт) и сохранил.
попытался загрузить картинку. В итоге функция getimagesize возвращает массив данных(размер картинки, mime type). Но при потыке сделать ресайз вываливаются ошибки. Тоесть вроде и проходит что картинка, но на самом деле не правильная картинка.
Такое повторил с разными типами(jpg, gif)
 

dimagolov

Новичок
mcfalu, интерес представляет возможность выполнить оттуда код. если такой возможности нет, то что там дописано мало кого волнует. если в твоем коде нет eval, а в gd (или чем там обрабатываются картинки) нет эксплуатируемых уязвимостей, то глубоко фиолетово что там дописано. если картинка тянется во что-то вроде галереи, то getimagesize можно считать 1-м уровнем проверки, успешный ресайз в тумбочку - 2-м. если он не пройден, то файл идет в сад.
 

fixxxer

К.О.
Партнер клуба
пишешь на картинке "я албанский вирус. помоги мне. скачай меня, переименуй в .php и запусти".
 

Viktor_Rez

Новичок
Картику качает только браузер. Все что !== USER_AGENT посылай в топку.

-~{}~ 17.04.10 03:16:

ИСЧХ, вот и не говори что для каких то там приложений? =)
 
Сверху