PHP图像上传安全性 - gd / imagick / move_upload_file

时间:2013-10-10 08:08:17

标签: php imagick

我目前上传图片的编码 如果我的编码是可以破解的,请告诉我你将如何做。我会在我的服务器上自己尝试一下。

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 [type]更安全(如果你说我的方法不安全)

我刚搬到nginx。 如何在上传目录中禁用所有脚本执行? php,sh,cgi,...

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

**我从未尝试过想象将文件上传到服务器。我用它来处理图像。

或者我是否需要将这些内容组合起来以安全的方式上传文件?

1 个答案:

答案 0 :(得分:2)

对于Nginx,要禁用脚本的执行,您的方法是正确的。要禁止更多脚本类型,

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