ThinkPHP的fetch方法探究
背景
前一段时间的,74cms
的模板文件的问题,再一次看到了,当模板文件可控时存在去打问题
可导致服务器沦陷
今天在看代码的时候,发现了如下书写方式,当然是不存在问题,只是鉴于自己没有跟踪过相关方法,导致每次出现fetch
方法的时候都会犹豫到底存不存在问题
$this->fetch('index',compact('list'))
故有此文
流程跟踪
这里的数据是从数据库中取出来的,而数据库的数据是可控的
代码段
1 | public function index() |
首先是进入到,view的fetch
方法中
在vars
参数中存在可控参数
然后会进入view的driver的fetch
方法
此时的变量还是我们之前传入的变量没有什么变化
最后会进入template
的fetch
方法中进行渲染
vars
是我们传入的变量
下面的cacheFile
是模板文件的缓存
可以看到,模板文件缓存的生成,并没有我们传入vars变量的参与
也就是说,第二个变量可控的时候并不能,影响模板文件的生成,而只是一种值的输出
有点类似assign
和dispaly
的第二个参数
故不存在影响,也就是可能存在xss
end
简单记录