用户上传的图片占我正在处理的网站上大部分内容的帐户。为了安全起见,我尝试将它们存储在webroot之外并使用readfile()
获取它们,但它太慢了所以我不得不回到旧方法。
现在我正在寻求确保所有上传都100%清理,因为它们将存储在webroot中。我的问题是,如果用户要将有害脚本重命名为.jpg,.gif,.png或.bmp并上传它,如果使用这样的函数重新创建图像,它在执行或获取时是否仍然有害:
function imageCreateFromAny($filepath) {
$type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize()
$allowedTypes = array(
1, // [] gif
2, // [] jpg
3, // [] png
6 // [] bmp
);
if (!in_array($type, $allowedTypes)) {
return false;
}
switch ($type) {
case 1 :
$im = imageCreateFromGif($filepath);
break;
case 2 :
$im = imageCreateFromJpeg($filepath);
break;
case 3 :
$im = imageCreateFromPng($filepath);
break;
case 6 :
$im = imageCreateFromBmp($filepath);
break;
}
return $im;
}
换句话说,无论如何,是否要将imagecreatefrom*
函数中的一个作为脚本而不是图像来执行内容,或者甚至将通过此函数运行的有害脚本缩减为损坏的图像?< / p>