Hex 发表于 2017-7-13 16:47
看了一下,确实感觉不一致,你可以尝试提交 BUG 到官方 github 上。
刚看了下3.15的源码,也是没改到这部分
Hex 发表于 2017-7-13 16:56
你为什么认为这里应该都用 file_type ?
900行左右
源码:
if (isset($this->_mimes[$ext]))
{
return is_array($this->_mimes[$ext])
? in_array($this->file_type, $this->_mimes[$ext], TRUE)
: ($this->_mimes[$ext] === $this->file_type);
}
按我上面的举例把一个jpg的文件改成png后缀,这里的判断就是
if (isset($this->_mimes['png']))
{
return is_array($this->_mimes['png'])
? in_array('image/jpeg', $this->_mimes['png'], TRUE)
: ($this->_mimes['png'] === 'image/jpeg');
}
这样看你不觉得有问题了吗
niushiluobo 发表于 2017-7-13 17:01
file_ext是扩展名,可以任由人改的,从jpg改成png,改成mp4,改成csv,都是可以的,而file_type又是读真 ...
这里没有直接比较吧,是通过 $ext 获取 $mimes 里的 file_type 值,然后和 $this->file_type 做比较呀
niushiluobo 发表于 2017-7-13 17:06
900行左右
源码:
你指的问题是说这里有漏洞?
niushiluobo 发表于 2017-7-13 17:06
900行左右
源码:
$this->_mimes['png'] === 'image/jpeg'这样的话,你改了文件扩展名,不就是不相等了么,会阻止你上传,这样就安全了呀。
Hex 发表于 2017-7-13 17:13
$this->_mimes['png'] === 'image/jpeg'这样的话,你改了文件扩展名,不就是不相等了么,会阻止你上传 ...
在程序员的角度来看是安全了,但是在用户的角度来看呢,就是有问题了,上传图片上传不去,用户有可能根本不知道这个文件被改过名字的,也是是网上下载之前被人改过的,这样就有问题了
$this->_mimes 里的内容你可以看下 config/mimes.php 里,里面存储的是扩展名和 file type 的关系,所以这里是通过扩展名找到 mime 然后在 mime 之间比较,也就是说 $this->file_type 是个 mime 值。
Hex 发表于 2017-7-13 17:11
这里没有直接比较吧,是通过 $ext 获取 $mimes 里的 file_type 值,然后和 $this->file_type 做比较呀 ...
对,去_mimes里面的png类型和真实的 jpeg类型做比较,这里就是漏洞,或者像你说的保护措施
niushiluobo 发表于 2017-7-13 17:17
对,去_mimes里面的png类型和真实的 jpeg类型做比较,这里就是漏洞,或者像你说的保护措施 ...
我觉得这不会造成漏洞啊,开发者不允许的文件还是无法上传上来呀。
Hex 发表于 2017-7-13 17:17
$this->_mimes 里的内容你可以看下 config/mimes.php 里,里面存储的是扩展名和 file type 的关系,所以这 ...
我知道是个mime值,我在写详细点
源码:
if (isset($this->_mimes[$ext]))
{
return is_array($this->_mimes[$ext])
? in_array($this->file_type, $this->_mimes[$ext], TRUE)
: ($this->_mimes[$ext] === $this->file_type);
}
解析后:
in_array('image/jpeg', array('image/png','image/x-png'), TRUE)
比较的是这个, 对吧?