niushiluobo 发表于 2017-7-13 17:01:54

Hex 发表于 2017-7-13 16:47
看了一下,确实感觉不一致,你可以尝试提交 BUG 到官方 github 上。

刚看了下3.15的源码,也是没改到这部分

niushiluobo 发表于 2017-7-13 17:06:56

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');
                }

这样看你不觉得有问题了吗

Hex 发表于 2017-7-13 17:11:24

niushiluobo 发表于 2017-7-13 17:01
file_ext是扩展名,可以任由人改的,从jpg改成png,改成mp4,改成csv,都是可以的,而file_type又是读真 ...

这里没有直接比较吧,是通过 $ext 获取 $mimes 里的 file_type 值,然后和 $this->file_type 做比较呀

Hex 发表于 2017-7-13 17:12:38

niushiluobo 发表于 2017-7-13 17:06
900行左右

源码:


你指的问题是说这里有漏洞?

Hex 发表于 2017-7-13 17:13:41

niushiluobo 发表于 2017-7-13 17:06
900行左右

源码:


$this->_mimes['png'] === 'image/jpeg'这样的话,你改了文件扩展名,不就是不相等了么,会阻止你上传,这样就安全了呀。

niushiluobo 发表于 2017-7-13 17:16:10

Hex 发表于 2017-7-13 17:13
$this->_mimes['png'] === 'image/jpeg'这样的话,你改了文件扩展名,不就是不相等了么,会阻止你上传 ...

在程序员的角度来看是安全了,但是在用户的角度来看呢,就是有问题了,上传图片上传不去,用户有可能根本不知道这个文件被改过名字的,也是是网上下载之前被人改过的,这样就有问题了

Hex 发表于 2017-7-13 17:17:02

$this->_mimes 里的内容你可以看下 config/mimes.php 里,里面存储的是扩展名和 file type 的关系,所以这里是通过扩展名找到 mime 然后在 mime 之间比较,也就是说 $this->file_type 是个 mime 值。

niushiluobo 发表于 2017-7-13 17:17:19

Hex 发表于 2017-7-13 17:11
这里没有直接比较吧,是通过 $ext 获取 $mimes 里的 file_type 值,然后和 $this->file_type 做比较呀 ...

对,去_mimes里面的png类型和真实的 jpeg类型做比较,这里就是漏洞,或者像你说的保护措施

Hex 发表于 2017-7-13 17:21:14

niushiluobo 发表于 2017-7-13 17:17
对,去_mimes里面的png类型和真实的 jpeg类型做比较,这里就是漏洞,或者像你说的保护措施 ...

我觉得这不会造成漏洞啊,开发者不允许的文件还是无法上传上来呀。

niushiluobo 发表于 2017-7-13 17:21:56

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)

比较的是这个, 对吧?
页: 1 [2] 3 4
查看完整版本: 上传类 判断文件允许类型 有bug?