Hex 发表于 2017-7-13 17:37
$ext = strtolower(ltrim($this->file_type, '.')); file_type 取出来是 mime 不是 .jpg 这种啊,$this->_m ...
嗯嗯,知道,我粗略的这么写,我想表达的是$ext = ‘jpg’; 而不是 $ext = 'png' , 如果你有时间的话可以试试改扩展名上传的操作,断点看看900那附近的代码,可能你会理解到我想表达的比较不应该是扩展名和真实类型比较,谢谢管理员
niushiluobo 发表于 2017-7-13 17:55
嗯嗯,知道,我粗略的这么写,我想表达的是$ext = ‘jpg’; 而不是 $ext = 'png' , 如果你有时间的话可 ...
你可以把你改过的代码发上来,一起研究一下。
Hex 发表于 2017-7-13 18:04
你可以把你改过的代码发上来,一起研究一下。
public function is_allowed_filetype($ignore_mime = FALSE)
{
if ($this->allowed_types === '*')
{
return TRUE;
}
if (empty($this->allowed_types) OR ! is_array($this->allowed_types))
{
$this->set_error('upload_no_file_types');
return FALSE;
}
$ext = strtolower(ltrim($this->file_ext, '.'));
if ( ! in_array($ext, $this->allowed_types, TRUE))
{
return FALSE;
}
// Images get some additional checks
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'jpe', 'png'), TRUE) && @getimagesize($this->file_temp) === FALSE)
{
return FALSE;
}
if ($ignore_mime === TRUE)
{
return TRUE;
}
foreach($this->allowed_types as $type)
{
if (isset($this->_mimes[$type]))
{
$mime = is_array($this->_mimes[$type]) ? $this->_mimes[$type] : array($this->_mimes[$type]);
if (in_array($this->file_type, $mime))
{
return true;
}
}
}
return FALSE;
}
按照自己的理解改了下后面的判断mime类型的,用真实的类型跟指定允许的类型比较。
刚接触CI框架不久,管理员多多指点:lol:lol
niushiluobo 发表于 2017-7-13 20:05
按照自己的理解改了下后面的判断mime类型的,用真实的类型跟指定允许的类型比较。
刚接触CI框架不久,管 ...
我看了一下,你改的代码好像是把以前只检查当前扩展名,改成检查所有已经允许的扩展名?
PS 我帮你修改了代码高亮
Hex 发表于 2017-7-14 10:29
我看了一下,你改的代码好像是把以前只检查当前扩展名,改成检查所有已经允许的扩展名?
PS 我帮你修改 ...
谢谢管理员
我改那部分的意思是验证所有允许的mime类型,因为在
if ($ignore_mime === TRUE)
{
return TRUE;
}
这之前是验证扩展名的,这没问题
$ignore_mimeCI的意思应该是要不要验证mime,不忽略的话,接下来就应该是验证mime类型,
那就应该去拿真实的文件mime类型跟允许的做比较了,而不再应该是拿扩展来比较了。
改成这样,也不存在伪造类型问题,故意改后缀或者无意拿到被改过后缀的文件,上传都先经过扩展名验证,被改的扩展名通过后,再验证mime
举例, 当前允许类型:【jpg, jpeg, png】
1,把 test.php(真实php类型) 改名成 test.jpg(伪造) 上传,扩展名通过, mime不通过
2. 把 test.png(真实png类型)改名成 test.jpg(伪造)上传,扩展名通过,mime通过
1是站在黑客角度去看
2是站在普通用户去看
以上是我的理解
Hex 发表于 2017-7-14 10:29
我看了一下,你改的代码好像是把以前只检查当前扩展名,改成检查所有已经允许的扩展名?
PS 我帮你修改 ...
其实也是你说的这个意思
niushiluobo 发表于 2017-7-14 10:50
其实也是你说的这个意思
懂了。。。。哈哈