高流量PHP框架审计需从真实请求路径切入:第一步确认入口是否统一接管(如public/index.php是否集中分发);第二步提取验证路由注册表(静态扫描、动态导出、中间件链逆向);第三步聚焦SQL注入、文件路径拼接、Session权限判定三大高危交汇点;第四步用composer audit检测依赖漏洞;第五步开启调试模式捕获真实错误上下文。

高流量PHP框架审计不是靠堆砌术语或罗列工具,而是从真实请求路径切入、逐层剥离中间件与路由逻辑、精准定位越权点与注入面——它要求你清楚知道哪一行代码决定权限开关,哪个配置项让日志变成情报源。
第一步:确认入口是否被统一接管
打开项目根目录下的 public/index.php 或 index.php,检查是否存在 【require_once 'vendor/autoload.php'】 且所有请求都经过该文件分发。若发现多个 PHP 文件直接暴露在 Web 目录下(如 controller/user.php),说明入口未收敛,后续审计失去基础锚点。
用 curl -I http://localhost/index.php/test 跟踪响应头中的 X-Powered-By 和 Server 字段,若返回 Apache/2.4.52 + PHP/8.1.27,说明未隐藏技术栈;若返回空或自定义值,则已关闭 expose_php。
这一步操作起来很简单,直接把文件拖进去就行。
立即学习“PHP免费学习笔记(深入)”;
第二步:提取并验证路由注册表
方法一:静态路由扫描
在 app/Providers/RouteServiceProvider.php 或 routes/web.php 中搜索 ->group(、->middleware(、Route::get( 等关键词,定位所有注册的路由规则。重点看闭包函数内是否调用 auth()、can()、middleware('admin') 等权限钩子。
方法二:动态路由提取
运行 php artisan route:list(Laravel)或 php think route:list(ThinkPHP),导出全部路由表。过滤出 method=GET 且 uri 包含 /api/v1/admin/ 的条目,手动访问其中一条,观察是否返回 403 还是直接跳转登录页——【返回 302 重定向而非 403 是典型后端未校验标志】。
方法三:中间件链逆向追踪
找到 AppHttpKernel.php,查看 $middlewareGroups['web'] 数组顺序。若 AppHttpMiddlewareAuthenticate::class 出现在 AppHttpMiddlewareEncryptCookies::class 之后,说明认证中间件被延迟执行,可能绕过。
第三步:聚焦三个高危数据交汇点
① 用户输入 → SQL 查询
搜索 Db::table(、$this->db->query(、PDO::prepare( 等调用,定位所有拼接 SQL 的位置。若发现类似 $sql = "SELECT * FROM users WHERE id = " . $_GET['id'] 的写法,立刻标记为高危——【这种写法在 ThinkPHP 5.0.x 至 5.1.37 全版本中可触发报错注入】。
② 请求参数 → 文件路径拼接
查找 file_get_contents(、include_once(、require __DIR__ . '/'. $_GET['tpl'] 这类语句。特别注意路径拼接是否使用 basename() 或 str_replace(['..', '\', '/'], '', $file) 做截断,没做则存在 LFI 风险。
③ Session 数据 → 权限判定
检查 login 方法中是否仅依赖 $_SESSION['user_id'] 判断身份,而未校验 token 时效性、IP 绑定或 User-Agent 变更。若存在 if ($_SESSION['role'] === 'admin') { include 'admin_panel.php'; },即为垂直越权温床。
第四步:验证 Composer 依赖是否带毒
执行 composer install --no-interaction --prefer-dist 强制更新 lock 文件,再运行 composer audit --format=json --severity=critical,high --with-dependencies > audit.json。
用 jq '.advisories[] | select(.severity == "critical") | "(.title) | (.cve)"' audit.json 查看结果。若输出为空但退出码为 0,说明未命中高危漏洞;若退出码非 0 且含 monolog/monolog CVE-2023-49077,则需立即升级到 2.10.3+。
注意:不要只扫 vendor 目录,必须确保 --with-dependencies 参数生效,否则开发依赖里的 yaml 解析器漏洞会被漏掉。
第五步:触发并捕获真实错误上下文
第一步:开启调试模式
将 config/app.php 中的 'debug' => false 改为 true,并设置 'log_level' => 'debug'。
第二步:构造异常请求
访问 /index.php?test=,观察是否返回 “Parse error: syntax error” 或直接执行命令——前者说明禁用了 eval 类函数,后者说明存在远程代码执行。
第三步:抓取完整堆栈
在浏览器开发者工具 Network 标签页中,筛选 XHR 请求,点击任意一个 500 响应,查看 Response 里是否包含 vendor/composer/ClassLoader.php 行号、当前执行的控制器类名及传入参数 dump。若出现真实路径和变量值,说明错误信息未脱敏。



















