foreach ($this->hidden as $key => $val) {
if (is_string($val)) {
if (strpos($val '.')) {
[$relation $name
= explode('.' $val);
$this->hidden[$relation
[
= $name;
else {
$this->hidden[$val
= true;
unset($this->hidden[$key
);
// 合并关联数据
$data = https://mparticle.uc.cn/api/array_merge($this->data $this->relation);
foreach ($data as $key => $val) {
if ($val instanceof Model || $val instanceof ModelCollection) {
// 关联模型对象
if (isset($this->visible[$key
) && is_array($this->visible[$key
)) {
$val->visible($this->visible[$key
);
elseif (isset($this->hidden[$key
) && is_array($this->hidden[$key
)) {
$val->hidden($this->hidden[$key
);
// 关联模型对象
if (!isset($this->hidden[$key
) || true !== $this->hidden[$key
) {
$item[$key
= $val->toArray();
elseif (isset($this->visible[$key
)) {
$item[$key
= $this->getAttr($key);
elseif (!isset($this->hidden[$key
) && !$hasVisible) {
$item[$key
= $this->getAttr($key);
跟进getAttr
方法 , 漏洞方法是getValue
, 但传入getValue
方法中的$value
是由getData
方法得到的 。
public function getAttr(string $name)
{
try {
$relation = false;
$value = $this->getData($name);
catch (InvalidArgumentException $e) {
$relation = $this->isRelationAttr($name);
$value = null;
return $this->getValue($name $value $relation);
跟进getData
方法 , $this->data
可控 , $fieldName
来自getRealFieldName
方法 。
跟进getRealFieldName
方法 , 默认直接返回传入的参数 。 所以$fieldName
也可控 , 也就是传入getValue
的$value
参数可控 。
跟进getValue
方法 , 在Thinkphp6.0.8触发的漏洞点在①处 , 但在Thinkphp6.0.12时已经对传入的$closure
- 魅族|地推拉新赚钱最全攻略,线下推广必知
- 苹果是全球最赚钱的科技公司|苹果手机营收1960亿美元,网友:感谢中国
- 由于最近天天都是写一些关于主流品牌的机型|关于小米note顶配版的一点感想
- 过年回家一下|最便宜的骁龙778g手机,续航最好的5g千元机,活该卖得好
- 阿里巴巴|阿里巴巴创下最慢的季度收入增长,国内稳健,国际还有待提高
- Python|目前最值得入手的五款手机,其中有你在用的吗?
- Python|8天卖出102万台,三星史上最畅销手机诞生
- 大木博士|宝可梦官方正式公开系列最新作品:《宝可梦 朱/紫》
- CPU|3399起!最强性价比旗舰来了:原神30分钟仅38.5℃
- 机械键盘|口碑最好的两款千元机,目前都在降价,这价格真香