2012-11-09 58 views
2

我正在開發一個網站,用戶提交鏈接,並指定該鏈接的圖像作爲縮略圖。該圖像將從網頁保存,而不是由用戶上傳。從外部服務器可靠,安全地保存圖像

好像我有兩個選擇這樣做,他們是file_get_contentscURL

的file_get_contents例如:

$url = 'http://example.com/file_name.jpg'; 
$img = '/path/file_name.jpg'; 
file_put_contents($image, file_get_contents($url)); 

捲曲例如:

$ch = curl_init('http://example.com/file_name.jpg'); 
$fp = fopen('/path/file_name.jpg', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

在可靠性和安全性方面,這是首選?使用現有方法獲取遠程文件有哪些安全問題,以及如何防止這些問題?

我正在使用Codeigniter,如果有任何類或功能,將有助於此。

回答

2

在可靠性和安全性方面,哪些是首選?使用現有方法獲取遠程文件有哪些安全問題,以及如何防止這些問題?

那麼,對於初學者來說,這並不比讓人們上傳更安全,如果這是關鍵。如果你不是非常小心,jimmyB可以將惡意.js上傳到他的服務器,然後你的任何一種方法都會在你的網站上提供他的文件。

我建議考慮CI的文件上傳類,而不是嘗試使用這些方法。無論哪種方式,最終結果都是以服務器上的文件結束;與CI的文件上傳,至少有一些內置的文件類型等檢查。你也可以利用CI的XSS過濾和東西。

http://ellislab.com/codeigniter/user_guide/libraries/file_uploading.html

+0

我避免了文件上傳,因爲它不是用戶應該做的事情。我不希望他們保存圖片並上傳。 – Motive

+0

至於安全性,我的擔心更多的是確保文件只是一個圖像,並且不包含任何惡意內容。 – Motive

+0

看一下codeigniters的核心/庫/ Upload.php文件(具體是MIME類型檢查)。您不能依賴文件擴展名(例如jpg/png)來確定文件的實際類型。就內容而言,對於短時間使用A/V軟件進行掃描,您所能做的並不多。請參閱http://stackoverflow.com/a/8638112/183254 – stormdrain