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文件都以某种方式启动,这种文件类型具有这些前导字节数,该文件类型具有这些类型的尾随字节等.如果你真的这么做很难欺骗想要生成某种类型的有效文件,但绝不是不可能的.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...