Действительно ли картинка?

Статус
В этой теме нельзя размещать новые ответы.

Фанат

oncle terrible
Команда форума
или, что скорее - картинка не проходит по каким-то другим параметрам. ширине, например

-~{}~ 07.06.05 21:52:

Ни одной нормальной еще не отбросил
о, да ты у нас спец по картинкам.
 

Stadnitski Alex

Новичок
Автор оригинала: Фанат
или, что скорее - картинка не проходит по каким-то другим параметрам. ширине, например
Ок, тогда скажи как ты внедрил в картинку php-код, и не испортил файл. Я переделаю одну из тех картинок, которую уже загрузил и попробую кинуть туда. Посмотрим что там не подходит
 

Фанат

oncle terrible
Команда форума
SiMM, есть проблема.
Я тут попробовал заинклюдить картинку, и вылезла такая штука, как Unexpected character in input.
 

SiMM

Новичок
> Unexpected character in input
Я на PHP 4.3.9 только что проверил - всё нормально. Если что - способ создания такого файла довольно прост ;)
PS: попробовал именно
PHP:
include 'PHPinJPG.jpg'
 

Фанат

oncle terrible
Команда форума
а не дашь новую ссылочку на файл? А то старая битая.
 

fixxxer

К.О.
Партнер клуба
есть смутные подозрения, что на винде чтение остановится на 0x1A и пробовать надо на *nix.
проверять лениво.
 

SiMM

Новичок
> а не дашь новую ссылочку на файл? А то старая битая.
Она не битая :) Просто наличие referer'а в заголовке на том халявном хостинге приводит к нежелательному результату :) Так что copy&paste http://simm.superihost.com/PHPinJPG.jpg

fixxxer, я таки на винде и проверял - не останавливается.
 

Stadnitski Alex

Новичок
Если чесно, то я не вижу способа проверить файл правильность. Действительно, тот файл, который кинул SIMM не бит, но выполняется.
Единственный способ, который есть(хотя он очень тупой и неправильный) - ето очищать файлы от <? и ?>. Вот так:
PHP:
<?
$file = 'alpcrazy.gif';
$f = fopen ('PHPinJPG.jpg', "r");
$f = file_get_contents($file);
if(strstr($f, "<?") || strstr($f, "?>")) 
{ 
       $f = str_replace('<?', '<|', $f);
       $f = str_replace('?>', '|>', $f);                     $fd = fopen($file, "w+");
       fputs($fd, $f);
       fclose;
}
?>
Так кат в данном случае мне надо грузть аватары, а они маленкие, то файлы не очень уродуются. Можету кого-то есть другие предложения?
 

Фанат

oncle terrible
Команда форума
предложения тебе высказали в начале топика.
Не заниматься идиотизмом.
 

kruglov

Новичок
Кароче, чтоб закрыть "эту бессмысленную дискуссию": стандарт JPG разрешает иметь в файле картинки текстовые поля. Например, с указанием авторства, марки фотоаппарата, даты снимка и пр. Этот текст там хранится в прямом виде и вот в него-то и можно в писать php-injection.

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

-~{}~ 08.06.05 09:05:

Кстати, файл может содержать <? ... ?> на вполне законных основаниях. Как часть "бинарных" данных и как часть xml-данных.
 

кекс

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

получилась битая картинка.. ( картинка обрезаная по нижнему краю) тоесть она нормально открывается во вьювере.. в фотошопе.. говорит This document may be damaged. ну типа файл может быть неполный . продолжить? ну и открывает его все равно заполняя пустое пространство чем-то из файла...
и при загрузке на сервер она начинает грузится.. а потом лезут надписи..

Warning: imagecreatefromjpeg(): '/tmp\php155.tmp' is not a valid JPEG file
Warning: imagesx(): supplied argument is not a valid Image resource
Warning: imagesy(): supplied argument is not a valid Image resource
Warning: imagecopyresampled(): supplied argument is not a valid Image resource
Warning: Division by zero in
ну все такое...

вот как избежать такого..? как сделать проверку на целостность этого файла как целой картинки а не обрезка..

-~{}~ 26.12.06 21:33:

я решил эту проблему... теперь если картинка не полная он так и говорит..
 

FreeSpace

Чукча-читатель
Есть способ внедрить PHP-код в картинку так, что без распознавания образов его действительно не определишь :)
http://img96.imageshack.us/img96/9651/phpinjpgpz0.jpg

А если ещё использовать технологии CAPTCHA, то задача определения "нехорошести" подобной картинки становится практически невыполнима...
 

DvR

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

если не переконвертится - вполне признак.
 

Фанат

oncle terrible
Команда форума
themylogin
вообще-то, твоего мнения никто не спрашивал.
 

jonjonson

Охренеть
Stadnitski Alex, дело в том, что даже если опустить текстовые поля в графических файлах, то в любом случае в них могут быть последовательности вида "<?", "?>" и даже "echo $password;". В графических файлах могут быть лубые последовательности. Просто они не являются php кодом. Это информация об изображении, а не злой умысел. (Можешь тупо экспериментально поискать по графическим файлам разные ПОСЛЕДОВАТЕЛЬНОСТИ БАЙТ).

Посему ты можешь отследить только одно, а именно не дать возможность инклудить в свои скрипты файлы пользователей.

Это тебе вдалбливают уже 4 страницы.

Проверку же на битость файла изображения пусть производит сам пользователь. Только он может увидеть, что отображается не то, что он предполагал. Уж о своей аватарке кроме пользователя никто лучше не позаботиться
 

Wicked

Новичок
по бредовости тема претендует на ту же нишу, что и "как проверить $_SERVER['REMOTE_ADDR'] на валидность".

Особенно порадовали товарищи Stadnitski Alex, FreeSpace, DvR, themylogin, Royal Flash, ayrat9... и это всего на четырех страницах!
 

Фанат

oncle terrible
Команда форума
jonjonson
а я считаю, что можно и не принимать картинки, содержащие <?, написав пользователю "Формат не поддерживается."
ну, не пройдёт одна картинка из тыщи - и ничего страшного, имхор, не случится.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху