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

  • Автор темы Автор темы MrPK
  • Дата начала Дата начала

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'])){ // я баран в составлении таких проверок )))
	//... проверка размера, загрузка на сервер и т.д.
}
Я хочу, что бы пользователь указал адрес именно картинки, а не скрипта.
Помогите пожалуйста найти выход из данной ситуации. Уже два дня лажу по форумам и не могу найти ответ ((
 
Я хочу, что бы пользователь указал адрес именно картинки, а не скрипта.
ну а если с расширением jpg там будет скрипт? и потом, о каком скрипте речь? о JavsScript?

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

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

вопрос только в том, как сделать защиту от хака. очевидно, надо смотреть заголовок Content-Type подгружаемого изображения....
 
функцией getimagesize можно проверить действительно ли отдается картинка по указанному урлу
 
вопрос только в том, как сделать защиту от хака. очевидно, надо смотреть заголовок 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
(тут, естественно, должны быть разные значения)
 
triumvirat, а куки разве отдадутся чужому домену?

В твоем примере, ты кого обманул, если image.php лежит у тебя же на сервере? )
 
зачем заставлять пользователя выкладывать картинку где-то
dimagolov не выпендривайся.

-~{}~ 13.10.08 10:25:

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

-~{}~ 13.10.08 10:28:

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

для начала проверю по размеру
ты уже смотрел, как именно ты это будешь делать?
 
dimagolov
а никто и не предлагает ВСЕМ. что ж у вас у всех такая бинарная логика-то - "раз спрашивает, значит хочет навязать всем без альтернативы"? ты читал вопрос? там написано:
хочу предоставить пользователю выбор, будет ли он загружать аватар с компьютера или же просто укажет URL картинки.

-~{}~ 13.10.08 15:41:

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

а про коршунов ты зря, я просто предвосхищаю вопрос, так как картинка по ссылке это не картинка на диске и узнать ее размер не загружая к себе не тривиально.
 
ну так ты провтыкал опять, что я предлагаю ее себе скачать, а потом уже разбираться =)
 
ты уже смотрел, как именно ты это будешь делать?
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]);
		}
	}
}
 
это то, что я называю словом жесть.
купить килограмм гречки, и вместо того, чтобы посмотреть вес на упаковке, сесть за комп, полезть в интернет на сайт производителя, там найти раздел с гречкой, скачать домой архив с информацией , программу для её посмотра, и посмотреть там.

чем тебя функция filesize не устроила?
 
Тем, что эта функция получает размер файла до загрузки на сервер. Я честно сказать не знаю как работает filesize но по мануалу смог понять только то, что определяет размер файла на моем сервере. Или я ошибаюсь?
 
Ну, если так - то да.
Нет, я имел в виду filesize уже после скачивания.
 
А если добрый мальчик Вася Пупкин укажет в качестве картинки файл гига на 2? )))
 
ну, васе не составит труда не отдавать контент-лен вообще.
просто имей это в виду.
 
Сверху