2012-05-12 72 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-considerations) – 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

危險 - 您沒有設置對獲取數據量的限制,因此惡意用戶可以放入鏈接導致多TB的下載。 curl支持將下載文件流式傳輸到文件,並加上獲取限制 –

+0

添加了一些代碼;) – Jeroen

+0

謝謝,我實際上可以將其指向我的本地上傳腳本,而不是代碼重複的驗證腳本。 – domino