【发布时间】:2012-10-25 13:33:16
【问题描述】:
我一直在寻找用于安全图像上传的良好脚本/教程,但无论我发现什么,阅读 cmets 似乎都存在与安全相关的脚本问题。所以我尝试编写我的脚本。我想请教有关此方面的任何安全建议。
//create arrays from allowed extensions and types
$allowed_exts = array("jpg", "jpeg", "png", "gif");
$allowed_types = array("image/jpeg", "image/png", "image/gif");
//extract extension from uploaded file
$ext = strtolower(substr($_FILES["image"]["name"], strrpos($_FILES["image"]["name"], ".") + 1));
我首先检查扩展是否是允许的扩展之一
if(in_array($ext, $allowed_exts) === false){
echo "Only .jpg, .png, .gif allowed";
}
然后检查类型是否是允许的类型之一
elseif(in_array($_FILES["image"]["type"], $allowed_types) === false){
echo "Only .jpg, .png, .gif allowed";
}
然后检查文件大小
elseif($_FILES["image"]["size"] > 2100000){
echo "File is too big";
}
现在使用 getimagesize 检查尺寸
elseif(!getimagesize($_FILES["image"]["tmp_name"])){
echo "File is not an image";
} else {
我创建一个随机文件名
$filename = mt_rand(1000,99999)."_".$_POST['p_id'].".jpg";
如果一切正常,我会使用 GD 创建一个拇指。简而言之(如果它是 jpeg):
a. imagecreatefromjpeg -> from uploaded file
b. imagecreatetruecolor -> with desired thumbnail dimensions
c. imagecopyresampled -> modify the image created under a.
d. imagejpeg -> save image to destination
所以,正如我所读到的那样,这应该可以消除图像带来的大多数问题,但我确信我错过了一些重要的东西。
我写入文件的目录有755权限,但我认为我必须通过在文件夹中放置一个.htaccess来对目录进行更多限制?里面应该有什么?
【问题讨论】:
-
我已经阅读了许多此类帖子,但没有一篇给我关于如何让用户安全上传图片的结论性答案。
标签: php image security file-upload gd