$ _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;
答案 0 :(得分:2)
在PHP documentatio n之后,此信息来自浏览器:
文件的mime类型,如果浏览器提供此信息。 一个例子是“image / gif”。但是,不检查这种哑剧类型 在PHP方面,因此不要将其值视为理所当然。
但是,正如文档和您对问题的其他评论所述,您不会对此信息非常有信心:某些浏览器不会填写该字段,可能会被黑客攻击等。 ..
处理mime类型的可靠方法是在实际文件上传到服务器上后检查它们。
如果您想了解详情,我们已经很好地讨论了这些问题on Stack Overflow。
答案 1 :(得分:1)
永远不要相信$ _FILES ['file'] ['type']。它接受从浏览器发送的任何内容。如果您担心安全性,请使用finfo_open验证上传文件的MIME类型。