【发布时间】:2011-11-10 15:28:15
【问题描述】:
上传图片时我可以信任来自$_FILES 的文件类型吗?还是我必须再次与exif_imagetype() 核对?
【问题讨论】:
上传图片时我可以信任来自$_FILES 的文件类型吗?还是我必须再次与exif_imagetype() 核对?
【问题讨论】:
我总是使用下一个函数来检查有效图像:
function Check_Image($Filename) {
if ($Check_Image = @getimagesize($Filename)) {
return TRUE;
}
return FALSE;
}
【讨论】:
永远不要相信来自外部的任何东西,尤其是文件上传!
检查大小、位置、mime/类型、扩展名以及您可以检查的任何其他内容!
【讨论】:
文件的 mime 类型(如果浏览器提供了此信息)。一个例子是“image/gif”。然而,这种 mime 类型在 PHP 端没有被检查,因此不要认为它的价值是理所当然的。
【讨论】:
不,你不能相信它,因为this information is provided by the client browser。
$_FILES['userfile']['type']文件的mime类型,如果是浏览器 提供了这些信息。一个例子是“image/gif”。这个哑剧 然而,类型并没有在 PHP 端检查,因此不采取 它的价值是理所当然的。
【讨论】:
不,您不能信任 $_FILES['userfile']['type'] 变量。此变量中存在的值可能是伪造的。您可以使用finfo_file 更可靠地检测文件类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE); // we need mime type
echo finfo_file($finfo, "/path/to/uploaded/file"); // displays something like image/gif
finfo_close($finfo);
这些函数需要 PHP >= 5.3.0。
【讨论】: