2013-10-10 62 views
3

我目前的上傳圖片編碼 如果我的編碼是可破解的,請告訴我您將如何做。我會在我的服務器上自己嘗試。PHP圖片上傳安全 - gd/imagick/move_upload_file

if ((strtolower($_FILES["user_image"]["type"]) == "image/jpeg" || strtolower($_FILES["user_image"]["type"]) == "image/pjpeg" || strtolower($_FILES["user_image"]["type"]) == "image/gif" || strtolower($_FILES["user_image"]["type"]) == "image/x-png" || strtolower($_FILES["user_image"]["type"]) == "image/png") && ($_FILES["user_image"]["size"] < 4194304)) {   
      if(strtolower($_FILES["user_image"]["type"]) == "image/jpeg" || strtolower($_FILES["user_image"]["type"]) == "image/pjpeg"){  
       $image_source = imagecreatefromjpeg($_FILES["user_image"]["tmp_name"]); 
      }  
      // if uploaded image was GIF 
      if(strtolower($_FILES["user_image"]["type"]) == "image/gif"){ 
       $image_source = imagecreatefromgif($_FILES["user_image"]["tmp_name"]); 
      }   
      // if uploaded image was PNG 
      if(strtolower($_FILES["user_image"]["type"]) == "image/x-png" || strtolower($_FILES["user_image"]["type"]) == "image/png"){ 
       $image_source = imagecreatefrompng($_FILES["user_image"]["tmp_name"]); 
      } 

這是我正在使用的上傳方法。

我們可以使用move_uploaded_file和imagick來上傳文件。

問:

**你將如何破解我的圖片上傳的代碼? (我試過用假JPEG頭和php-GD清理文件。)
**你爲什麼告訴move_uploaded_file固定比imagecreatefrom【類型】(如果你說我的方法是不安全的)

我剛搬到nginx。 如何禁用上傳目錄中的所有腳本執行? PHP,SH,CGI,...

location /uploads/ { 
    location ~ .*\.(php)?$ 
    { 
    deny all; 
    } 
} 

**我從來沒有嘗試過imagick將文件上傳到服務器。我正在使用它來處理圖像。

或者我需要結合那些以安全方式上傳文件嗎?

回答

2

對於Nginx,要禁用腳本的執行,您的方式是正確的。禁止更多腳本類型,

location ~* ^/(upload|images|more_dirs)/.*\.(php|php5|sh|more_types)$ 
{ 
    deny all; 
}