使用imagecreatefrom*php重新创建上载/链接图像
用户上传的图片占据了我工作的网站内容的很大一部分。出于安全原因,我尝试将它们存储在webroot之外,并使用使用imagecreatefrom*php重新创建上载/链接图像,php,security,image-uploading,php-gd,Php,Security,Image Uploading,Php Gd,用户上传的图片占据了我工作的网站内容的很大一部分。出于安全原因,我尝试将它们存储在webroot之外,并使用readfile()获取它们,但速度太慢,因此我不得不回到旧方法 现在我希望确保所有上传都经过100%消毒,因为它们将存储在webroot中。我的问题是,如果用户将有害脚本重命名为.jpg、.gif、.png或.bmp并将其上载,如果使用以下函数重新创建图像,则在执行或获取时是否仍然有害: function imageCreateFromAny($filepath) { $typ
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*
函数,使其将内容作为脚本而不是图像来执行,或者甚至一个通过该函数运行的有害脚本会被还原为一个损坏的图像?我不这么认为,但我没有资格。据我所知,脚本可以存储在jpeg文件的元数据中,但我不认为imagecreatefrom…
使用元数据。将坏文件重命名为PNG或其他格式很可能不是问题,但应该使用finfo
函数集检查文件,我在信息安全堆栈交换上读到它们比其他文件(如getimagesize)更简单。感谢您的评论,希望其他人也能参与进来。也许在信息安全Stack exchangeThanks上试着问同样的问题,我也在那里问了这个问题。希望有人能加入其中一个。