Вопрос про проверку удаленного рисунка

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

prog90

Новичок
Здравствуйте,
мне нужно добавить на сайт возможность загружать аватар для группы из удаленного url. Чтобы сохранился только url, а сам рисунок не закачивался на сервер. А как проверить, что размер (в байтах) рисунка не превышает определенного размера, как проверить тип этого рисунка, что в него не вложен вирус и т.д., при этом не копируя его на сервер? Или его нужно временно скопировать на сервер?
И как правильно сделать миниатюру? Просто установить размер (например, по ширине) для аттрибута src тега img ?
 

Redjik

Джедай-мастер
у тебя миллион групп? чего экономишь? пускай грузят на сервер картинки иначе xss неизбежна
 

prog90

Новичок
Т.е. иначе никак не избежать xss? Наверное потому что, даже если я буду перед каждой загрузкой страницы проверять url фотографии, то все равно кто-то может изменить файл по этому адресу в этот момент, и загрузиться что-нибудь не то (xss)?
А если там еще надо тоже самое сделать (добавить поле url для загрузки) для аватар пользователей, для добавления фотографий в фотоальбомы и для логотипов мероприятий (события вроде бы называется)? То все равно стоит копировать все файлы на сервер?
 

workOnFood

Новичок
у тебя миллион групп? чего экономишь? пускай грузят на сервер картинки иначе xss неизбежна
Поправь если я ошибаюсь, но помоему фильтрация урла картинки на наличие > < ' " знаков должна спасать от xss в данном случае...
 

Redjik

Джедай-мастер
тут другое - куку утащат пользователя, который посмотрел картинку
 

workOnFood

Новичок
тут другое - куку утащат пользователя, который посмотрел картинку
Не понимаю) Как?

Если не фильтровать на " ' > < то можно сделать так например -

PHP:
$url = '><script>Тырим куки</script><';
<img src='$url' />
или

PHP:
$url = 'урл картинки" onmouseover="тырим куки" some="';
<img src="$url" />
А если фильтровать то мне кажется нереально это.

P.S. Это псевдокод, если что)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Место на жестком диске это самый дешевейший серверный ресурс, который маштабируется абсолютно линейно — экономить его бессмысленно. Дешевле только место в /dev/null
 

prog90

Новичок
ясно.
А вообще если загружают рисунок и в нем, например, запечатан какой-нибудь исполняемый скрипт или что-нибудь такое (есть вроде бы такие инструменты), то его антивирус проверяет при загрузке на сервер? Или как такое можно проверить. Слышал, что в формат рисунка вроде бы можно что-то закодировать в дополнение к рисунку.
 

prog90

Новичок
И еще вопрос:
как лучше скопировать файл с url? с помощью file_get_contents?
PHP:
$image = file_get_contents($file_url);
$filename = hash($file_url);
$ext = get_image_extension($file_url);
$image_path = $path_to_images."/".$filename.$ext
file_put_contents($image_path,  $image);
$fhandler = fopen($image_path, "r");
 

Redjik

Джедай-мастер
workOnFood
Может я путаю название типа уязвимости, но суть такая...
Человек прописывает в качестве урл свой сервак, который на выходе отдает картинку, но при этом в файл сохраняет куку в файл, тут не нужен script вообще.
 

Вурдалак

Продвинутый новичок
Иван Redjik Матвеев, это получается, я могу вставить сюда картинку через [img] и получить cookies всех посетителей этой темы?
 

prog90

Новичок
Так наверное не получится. Потому что это обычно делают вроде так - сниффер - в урл в src в конце подставляет cookie. Но если в конце будет .jpg то это наверное не получится
 

Absinthe

жожо
иначе xss неизбежна
Бред.

тут другое - куку утащат пользователя, который посмотрел картинку
Бред. Учи основы работы веба.

А вообще если загружают рисунок и в нем, например, запечатан какой-нибудь исполняемый скрипт или что-нибудь такое (есть вроде бы такие инструменты), то его антивирус проверяет при загрузке на сервер?
Нет, лишь в единичных случаях запалит. Да и антивирус на сервере зачем, не mail-сервер же? И вопрос на миллион: какая разница?

Или как такое можно проверить
Это не нужно.

Может я путаю название типа уязвимости, но суть такая...
Путаешь.

$ext = get_image_extension($file_url);
Забыл проверить по списку разрешенных, либо определить по mime.

~~~~~~~~~~~~~
zerkms обогнал :)
 

Redjik

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

Ой, да гугл хром п**дит - так наверное?

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

И далеко не факт, что файл www.example.com/bred_petrosyana.jpg - не удаленный скрипт
 

prog90

Новичок
А как удалить временный файл автоматически? Если его создать во временной папке php, то он обязательно удалится? Просто иначе нужно писать unlink перед каждой обрботкой ошибок и redirect.
 

prog90

Новичок
а если я его создал в скрипте, т.е. это я загружал с url. Не локальная загрузка.
Вроде есть функция tmpfile(), но там вроде бы нельзя задать расширение. Тогда файл не пройдет проверку дальше.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху