2

问题:

$_FILES[...]['type'] 是直接来自客户端还是 PHP / Apache 设置了这个值?

为什么我要问这个:

这个刚刚在编写应该检查上传文件类型的上传脚本时弹出,我已经有用于检查上传文件 mime 类型的代码,但我需要那个代码吗?

一些与问题相关的代码:

这是我目前在上传文件验证方法中得到的(简化),这应该检查上传文件的类型是否真的是客户端声称的:

// Get temporary file and mime type
$src  = $file["tmp_name"];
$mime = $file['type'];

// Get real file mime type, this does not guarantee that file is valid
$finfo = new finfo();
$file_mime = $finfo->file( $src, FILEINFO_MIME_TYPE );
unset($finfo);

// Test mime types against each other
if ($file_mime === $http_mime)
    return true;
4

2 回答 2

2

PHP 文档之后,此信息来自浏览器:

文件的 MIME 类型(如果浏览器提供此信息)。一个例子是“image/gif”。然而,这种 mime 类型在 PHP 端没有被检查,因此不要认为它的价值是理所当然的。

但是,正如文档和对您的问题的其他评论所述,您不想对此信息非常有信心:某些浏览器只是不填写该字段,它可能被黑客入侵,等等......

处理 mime 类型的可靠方法是在实际文件上传到服务器后对其进行检查。

如果您想了解详细信息,这些问题已在 Stack Overflow 上得到很好的讨论。

于 2013-06-06T10:26:41.400 回答
1

永远不要相信 $_FILES['file']['type']。它接受从浏览器发送的任何内容。如果您担心安全性,请使用finfo_open来验证上传文件的 MIME 类型。

于 2013-06-06T10:19:41.847 回答