if (!empty($this->relationWrite)) {
$this->autoRelationUpdate();
return true;
if ($this->autoWriteTimestamp && $this->updateTime) {
// 自动写入更新时间
$data[$this->updateTime
= $this->autoWriteTimestamp();
$this->data[$this->updateTime
= $data[$this->updateTime
;
// 检查允许字段
$allowFields = $this->checkAllowFields();
跟进checkAllowFields
方法 , 漏洞方法是db
, 默认也是会触发该方法 , 继续跟进 。
protected function checkAllowFields(): array
{
// 检测字段
if (empty($this->field)) {
if (!empty($this->schema)) {
$this->field = array_keys(array_merge($this->schema $this->jsonType));
else {
$query = $this->db();
跟进db
方法 , 存在$this->table . $this->suffix
字符串拼接 , 可以触发__toString
魔术方法 , 把$this->table
设为触发__toString
类即可 。
public function db($scope = [
): Query
{
/** @var Query $query */
$query = self::$db->connect($this->connection)
->name($this->name . $this->suffix)
->pk($this->pk);
if (!empty($this->table)) {
$query->table($this->table . $this->suffix);
全局搜索__toString
方法 , 最后选择vendor\\topthink\\think-orm\\src\\model\\concern\\Conversion.php
类中的__toString
方法 。
跟进__toString
方法 , 调用了toJson
方法 。
跟进toJson
方法 , 调用了toArray
方法 , 然后以JSON格式返回 。
跟进toArray
方法漏洞方法是getAtrr
默认就会触发 , 只需把$data
设为数组就行 。
public function toArray(): array
{
$item = [
;
$hasVisible = false;
foreach ($this->visible as $key => $val) {
if (is_string($val)) {
if (strpos($val '.')) {
[$relation $name
= explode('.' $val);
$this->visible[$relation
[
= $name;
else {
$this->visible[$val
= true;
$hasVisible = true;
unset($this->visible[$key
);
- 魅族|地推拉新赚钱最全攻略,线下推广必知
- 苹果是全球最赚钱的科技公司|苹果手机营收1960亿美元,网友:感谢中国
- 由于最近天天都是写一些关于主流品牌的机型|关于小米note顶配版的一点感想
- 过年回家一下|最便宜的骁龙778g手机,续航最好的5g千元机,活该卖得好
- 阿里巴巴|阿里巴巴创下最慢的季度收入增长,国内稳健,国际还有待提高
- Python|目前最值得入手的五款手机,其中有你在用的吗?
- Python|8天卖出102万台,三星史上最畅销手机诞生
- 大木博士|宝可梦官方正式公开系列最新作品:《宝可梦 朱/紫》
- CPU|3399起!最强性价比旗舰来了:原神30分钟仅38.5℃
- 机械键盘|口碑最好的两款千元机,目前都在降价,这价格真香