Php 美元文件[';类型';]是由客户端还是服务器设置的? 问题:

Php 美元文件[';类型';]是由客户端还是服务器设置的? 问题:,php,file-upload,mime-types,Php,File Upload,Mime Types,$_文件[…]['type']是直接从客户端发送的,还是PHP/Apache设置了这个值 我为什么问这个: 这一个只是在编写上传脚本时弹出的,应该检查上传的文件类型,我已经有了检查上传的文件mime类型的代码,但我需要那个代码吗 与问题相关的一些代码: 以下是我目前在上传文件验证方法中得到的(简化的)结果,这应该检查上传文件的类型是否确实是客户端声称的类型: //获取临时文件和mime类型 $src=$file[“tmp_name”]; $mime=$file['type']; //获取真实的文

$_文件[…]['type']是直接从客户端发送的,还是PHP/Apache设置了这个值

我为什么问这个: 这一个只是在编写上传脚本时弹出的,应该检查上传的文件类型,我已经有了检查上传的文件mime类型的代码,但我需要那个代码吗

与问题相关的一些代码: 以下是我目前在上传文件验证方法中得到的(简化的)结果,这应该检查上传文件的类型是否确实是客户端声称的类型:

//获取临时文件和mime类型
$src=$file[“tmp_name”];
$mime=$file['type'];
//获取真实的文件mime类型,这并不保证该文件有效
$finfo=新的finfo();
$file\u mime=$finfo->file($src,FILEINFO\u mime\u TYPE);
unset($finfo);
//相互测试mime类型
如果($file\u mime===$http\u mime)
返回true;

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

在n之后,此信息来自浏览器:

文件的mime类型(如果浏览器提供此信息)。 例如“image/gif”。但是,未检查此mime类型 在PHP方面,因此不要认为它的价值是理所当然的

然而,正如文档和其他对你的问题的评论所说,你不想对这些信息很有信心:一些浏览器只是不填写字段,它可能被黑客攻击,等等

处理mime类型的可靠方法是在实际文件上传到服务器后检查它们


如果你想了解细节,这些问题已经被很好地讨论过了

官方文件链接+1。“有些浏览器根本就不占上风”:你能从头顶上说出一些吗?要知道是否将该字段留空是常见的行为…不,我不能:常见的行为是填充字段,我从未遇到过不这样做的浏览器。。。目前为止