微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP的finfo :: buffer怎么会被欺骗?

处理上传文件时,$_FILES [‘foo’] [‘type’]完全不可靠.我发现如果你在OS X上更改扩展名,’type’会自动更改.

而是考虑:

$fileInfo = new \finfo(FILEINFO_MIME);
$mimeType = $fileInfo->buffer(file_get_contents($_FILES['foo']['tmp_name']));
$mimeType = explode(';', $mimeType);

现在,如果我将PHP脚本重命名为.jpg并上传它(在OS X 10.10上)$_FILES [‘foo’] [‘type’] = image / jpeg和$mimeType = text / x-PHP.

文件类型可以很容易地改变,但PHP的finfo :: buffer如何被欺骗? PHP检查$_FILES [‘foo’] [‘type’]和finfo(FILEINFO_MIME)之间有什么区别?

解决方法:

PHP不检查$_FILES类型中的任何内容;在上传文件时,发送浏览器正在发送它认为文件类型的元数据. $_FILES [‘file’] [‘type’]仅反映浏览器上传的此值.显然,任何人都可以随意欺骗.

Finfo使用magic database,它只是识别文件类型特征的集合.即,所有JPEG文件都有一个特征标题,所有ZIP文件都以某种方式启动,这种文件类型具有这些前导字节数,该文件类型具有这些类型的尾随字节等.如果你真的这么做很难欺骗想要生成某种类型的有效文件,但绝不是不可能的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐