正如我在 StackOverflow 问题中所建议的那样,我现在将其指向信息安全组,因为尽管获得了多次支持,但没有人能够回答我的问题。
用户上传的图片占我正在开发的网站上的大部分内容。出于安全原因,我尝试将它们存储在 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*功能以脚本而不是图像的形式执行内容,或者甚至将通过此运行的有害脚本减少为损坏的图像?
更新 我还将检查文件类型和扩展名,但我想知道用户是否设法绕过这些,这最后的手段是否有助于以任何方式保护我的服务器和/或客户端。谢谢你。