2013-08-30 93 views
1

我在http://www.codeforest.net/html5-image-upload-resize-and-crop中的代碼如下,在客戶端調整大小後,使用file_put_contents($file, $data);保存。上傳base64_decode圖片通過文件把內容安全嗎?

if ($_POST) { 
    define('UPLOAD_DIR', 'uploads/'); 
    $img = $_POST['image']; 
    $img = str_replace('data:image/jpeg;base64,', '', $img); 
    $img = str_replace(' ', '+', $img); 
    $data = base64_decode($img); 
    $file = UPLOAD_DIR . uniqid() . '.jpg'; 
    $success = file_put_contents($file, $data); 
    print $success ? $file : 'Unable to save the file.'; 
} 

但是我唐諾這個功能實際上是如何工作的,正是我擔心的是 - 如果用戶改變了隱藏的輸入字段和僞造的PHP代碼看起來像圖像,或用戶不改變隱藏的輸入字段與另一個圖像大小不同,防止這種情況發生的最佳做法是什麼?

+0

最佳實踐:不要使用表單域來處理不希望用戶篡改的數據。使用會話變量。 – Barmar

+0

它是通過客戶端大小調整大小,如何使用會話數據? – Anonymous

+0

我假設隱藏的字段是由另一個PHP腳本創建的。如果您必須獲取客戶端創建的數據,那麼您需要驗證它。將圖像寫入文件後使用'getimagesize'。 – Barmar

回答

1

將數據寫入文件後,使用getimagesize()驗證它是否爲正確的圖像數據。如果失敗,請刪除該文件並報告失敗的上傳。

+0

是從在jpeg圖像中攜帶的PHP編寫的病毒安全的圖像? – Anonymous

+0

可能不是。除非您可以在PHP中找到要使用的防病毒類。我在我的評論中說過,如果可以避免,不要從用戶那裏獲取數據。 – Barmar

+0

它的頭像圖片,我必須這樣做。使用GD在服務器端複製圖像,但是在調整到base64_decode之後不知道如何編寫腳本 – Anonymous