简答:不.
更长的回答:
比较扩展并确保它与MIME类型匹配并不能真正阻止任何事情.正如评论中所说,修改文件扩展名更加容易.MIME类型和扩展名仅作为提示,它们没有固有的安全性.
确保传入文件不会造成伤害,这在很大程度上取决于您对它们的目的是什么.在你的情况下,我明白你期待图像.所以你可以做的是首先执行一些健全性检查:扫描前几个字节以查看文件是否包含相关的图像标题签名 - 所有相关的图像格式都有这些.
"签名标题"可帮助您确定文件尝试模拟的图像格式类型.在下一步中,您可以检查其余内容是否符合基础图像格式.这将保证您的文件实际上是该特定格式的图像文件.
但即便如此,文件也可以通过以下方式精心制作:当您显示图像时,用于显示该图像的流行库(例如libpng等)会遇到攻击者在该库中找到的缓冲区溢出.
不幸的是,除了不允许来自客户端的任何输入之外,没有办法主动防止这种情况.
注意 - 这个答案现在已经过时了
getimagesize 的文档明确指出“不要使用 getimagesize() 来检查给定文件是否为有效图像。
示例代码:
function getRealMimeType($filename) {
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");
if (!$finfo) {
echo "Opening fileinfo database failed";
return "";
}
return $finfo->file($filename);
}
Run Code Online (Sandbox Code Playgroud)
请参阅finfo_file文档。