2012-05-12 2 views
1

PHP:Загрузка удаленного изображения через php (безопасно)

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

Jquery:

Причины я добавил JQuery в тег, возможно, можно позволить пользовательской точке URL изображения и как-то загрузить его через обычный вход загрузки файла непосредственно (без необходимости вручную загрузить изображение на компьютер)

+0

??? Каковы ваши проблемы? – Baba

+0

Возможный дубликат [Получение файла на сервере, изменение размера с помощью PHP GD2, соображения безопасности] (http://stackoverflow.com/questions/8606951/fetching-a-file-on-a-server-resizing-with-php -gd2-security-соображения) – hakre

ответ

2

Вы можете использовать cURL, чтобы загрузить картинку, а затем используйте getimagesize(), чтобы проверить, действительно ли это изображение - для целей безопасности.

<?php 
$limit = 1024*1024*10 // Max. file size in bytes (1024*1024*10 = 10MB) 
$ch = curl_init(); 

$fh = fopen('image.jpg', 'w'); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FILE, $fh); 
curl_setopt($ch, CURLOPT_RANGE, '0-' . $limit); 

curl_exec($ch); 

curl_close($ch); 

if ($image = getimagesize ("image.jpg")) { 
    // It's an image 
} 
else { 
    // Not an image; delete! 
} 
+0

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

+0

Добавлен некоторый код;) – Jeroen

+0

Спасибо, я могу на самом деле указать это на свой локальный сценарий загрузки, а не на код дублирования сценариев проверки. – domino

Смежные вопросы