Проверка корректности URL адреса картинки

MrPK

Новичок
Проверка корректности URL адреса картинки

Доброго времени суток. Делаю скрипт авторизации и столкнулся с маленькой, но тем не менее весомой (по крайней мере для меня) проблемой.

В общем, хочу предоставить пользователю выбор, будет ли он загружать аватар с компьютера или же просто укажет URL картинки.
Скрипт проверяет размер картинки, если надо сжимает, и загружает на мой сервер.
Проблема в том, что я не могу сообразить как проверить корректность адреса.
Вот, что получилось у меня, только оно не работает (Warning: eregi() [function.eregi]: REG_ERANGE in ... on line ...)
PHP:
if (eregi("^(http://])+([_0-9a-z-\.])+([\/_0-9a-z-])+((\.gif)|(\.jpg)|(\.jpeg)|(\.png))?$",$_POST['avatar'])){ // я баран в составлении таких проверок )))
	//... проверка размера, загрузка на сервер и т.д.
}
Я хочу, что бы пользователь указал адрес именно картинки, а не скрипта.
Помогите пожалуйста найти выход из данной ситуации. Уже два дня лажу по форумам и не могу найти ответ ((
 

dimagolov

Новичок
Я хочу, что бы пользователь указал адрес именно картинки, а не скрипта.
ну а если с расширением jpg там будет скрипт? и потом, о каком скрипте речь? о JavsScript?

вообще зачем заставлять пользователя выкладывать картинку где-то, чтобы ее же закачать к себе и менять размер? тут или позволять вставлять аватары как url и прямо его вставлять в тег img, или пусть себе обычным upload загружают к тебе на сервер, а там ты уж проверяй что тебе загрузили.
 

Духовность™

Продвинутый новичок
Я хочу, что бы пользователь указал адрес именно картинки, а не скрипта.
это бессмысленно. я могу сделать адрес www.server.com/image.jpg который будет самым настоящим скриптом.

вообще, имхо, если пользователь указывает URL картинки, то сохранять её не надо - её надо подгружать. именно так сделано на форумах IPB. и это очень удобно, я считаю.

вопрос только в том, как сделать защиту от хака. очевидно, надо смотреть заголовок Content-Type подгружаемого изображения....
 

A1x

Новичок
функцией getimagesize можно проверить действительно ли отдается картинка по указанному урлу
 

dimagolov

Новичок
вопрос только в том, как сделать защиту от хака. очевидно, надо смотреть заголовок Content-Type подгружаемого изображения....
объясни, о чем идет речь? при условии, если url валиден и мы вставляем его в тег img, то какой хак броузера того, кто порсматривает контент может быть произведен? даже если Content-Type там не картинка?
 

Духовность™

Продвинутый новичок
dimagolov
В html:
PHP:
<img src="/image.php">
в image.php:
PHP:
$f = fopen('base', 'a');
fwrite($f, implode(',', $_COOKIE)."\n");
fclose($f);
получаем в итоге веселую базу всех кук пользователей

1,1218017493,1,3748984ec0c4f7c71faf921edeebafca
1,1218017493,1,3748984ec0c4f7c71faf921edeebafca
1,1218017493,1,3748984ec0c4f7c71faf921edeebafca
1,1218017493,1,3748984ec0c4f7c71faf921edeebafca
1,1218017493,1,3748984ec0c4f7c71faf921edeebafca
1,1218017493,1,3748984ec0c4f7c71faf921edeebafca
(тут, естественно, должны быть разные значения)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
triumvirat, а куки разве отдадутся чужому домену?

В твоем примере, ты кого обманул, если image.php лежит у тебя же на сервере? )
 

Фанат

oncle terrible
Команда форума
зачем заставлять пользователя выкладывать картинку где-то
dimagolov не выпендривайся.

-~{}~ 13.10.08 10:25:

MrPK
какой смысл проверять на валидность урл, если ты все равно закачаешь картинку, и сможешь проверить её как тебе заблагорассудится?

-~{}~ 13.10.08 10:28:

сохранять её не надо - её надо подгружать. именно так сделано на форумах IPB
triumvirat
что - неужели аватары именно так показываются? представляю себе вид темы через полгодика.
фантазия у тебя богатая.
получаем в итоге веселую базу всех кук пользователей
похоже, у тебя не с фантазией плохо, а с головой...
 

MrPK

Новичок
зачем заставлять пользователя выкладывать картинку где-то
Я не говорю выкладывать. В интернете полно сайтов с готовыми аватарами и лично мне (как пользователю) гораздо проще указать урл картинки чем заливать с компа, особенно когда пинг с сервером заставляет желать лучшего.
какой смысл проверять на валидность урл, если ты все равно закачаешь картинку, и сможешь проверить её как тебе заблагорассудится?
Логично, так и придется делать. Думаю для начала проверю по размеру и если файл будет в пределах 55 b > img > 50*1024 b тогда уже буду закачивать или же можно сделать закачку до полуметра и потом просто уменьшать картинку.
 

dimagolov

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

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

Фанат

oncle terrible
Команда форума
dimagolov
а никто и не предлагает ВСЕМ. что ж у вас у всех такая бинарная логика-то - "раз спрашивает, значит хочет навязать всем без альтернативы"? ты читал вопрос? там написано:
хочу предоставить пользователю выбор, будет ли он загружать аватар с компьютера или же просто укажет URL картинки.
-~{}~ 13.10.08 15:41:

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

dimagolov

Новичок
ок, про альтернативы провтыкал.

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

Фанат

oncle terrible
Команда форума
ну так ты провтыкал опять, что я предлагаю ее себе скачать, а потом уже разбираться =)
 

MrPK

Новичок
ты уже смотрел, как именно ты это будешь делать?
PHP:
function fsize($path){
	$fp = fopen($path,"r");
	$inf = stream_get_meta_data($fp);
	fclose($fp);
	foreach($inf["wrapper_data"] as $v){
		if (stristr($v,"content-length")){
			$v = explode(":",$v);
			return trim($v[1]);
		}
	}
}
 

Фанат

oncle terrible
Команда форума
это то, что я называю словом жесть.
купить килограмм гречки, и вместо того, чтобы посмотреть вес на упаковке, сесть за комп, полезть в интернет на сайт производителя, там найти раздел с гречкой, скачать домой архив с информацией , программу для её посмотра, и посмотреть там.

чем тебя функция filesize не устроила?
 

MrPK

Новичок
Тем, что эта функция получает размер файла до загрузки на сервер. Я честно сказать не знаю как работает filesize но по мануалу смог понять только то, что определяет размер файла на моем сервере. Или я ошибаюсь?
 

Фанат

oncle terrible
Команда форума
Ну, если так - то да.
Нет, я имел в виду filesize уже после скачивания.
 

MrPK

Новичок
А если добрый мальчик Вася Пупкин укажет в качестве картинки файл гига на 2? )))
 

Фанат

oncle terrible
Команда форума
ну, васе не составит труда не отдавать контент-лен вообще.
просто имей это в виду.
 
Сверху