2012-08-29 64 views
3

所以,我想安全地從URL下載圖片。我的第一個想法當然是檢查擴展名 - 如果它兼容,只需下載並保存好擴展名(它應該是安全的,因爲服務器不會運行存儲在.jpg文件中的PHP代碼(除非,除非它被配置爲這樣))。使用這種方法還存在一些風險,如果有更好的方法來做到這一點?通過URL安全地上傳/下載圖片

+0

當你說「安全」時,你關心什麼? –

+0

我擔心用戶可以利用exploit下載可執行文件或圖像來獲得對服務器的控制權。 – Ben

+0

這是一個合理的擔憂嗎? – Ben

回答

0
/* gets the data from a URL */ 
function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

獲取文件信息,您可以使用curl_getinfo() 更多信息here

這會幫助你通過URL下載任何東西用PHP。 而關於上傳?你想保存文件的地方或什麼?

+1

我不認爲你明白。我已經使用過file_get_contents(當然,我可以使用curl,但在當時沒有任何差異,所以只是爲了與它相處並測試..)。從url下載數據不是問題。問題是要做到這一點安全 - 我的意思是我希望這隻能用於圖像,所以我解析鏈接的擴展名,我保存了相同的擴展名(只允許image-ext),但它是否足夠安全,或者我應該檢查一些東西別的呢? 而安全我的意思是說,我不希望有人破解它,並上傳PHP shell或其他可能是危險的東西。 – RippeR

0

您應該檢查它是否是圖像,因爲可以操縱擴展名。

$file = file_get_contents($url); 
if(@imagecreatefromstring($file)) { 
    // it's a valid image file; handle it 
} 
else { 
    // it's not an image file; error! 
}