2013-10-10 66 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; 
}