php-laravel-audit
PHP Laravel 框架安全审计(php-laravel-audit)
分析 Laravel 项目源码中的“框架特效安全机制”和“常见踩坑模式”,重点覆盖:
- 鉴权与路由保护(middleware/auth/Policies/Gates)
- CSRF 与 token 保护(VerifyCsrfToken、except 列表、API 与 Cookie 认证差异)
- Session 与 Cookie 安全(session_regenerate_id、cookie flags、remember 机制的风险点)
- Eloquent mass assignment 与 request-to-model 写入缺陷(Model::create/fill/update 与
$request->all()链) - Blade 模板渲染中的 raw 输出与表达式执行风险(
{!! !!}、@php以及未转义输出) - Laravel signed URL 与路由签名校验是否闭环(Signed middleware 与生成位置)
输入
用户提供:
source_path:Laravel 项目源码根目录 可选:output_path:输出目录路径(默认{source_path}_audit)
输出目录
输出到:
{output_path}/framework_audit/
laravel_{timestamp}.md
框架识别(必做)
必须给出你识别该项目为 Laravel 的证据点(不允许空口断言):
composer.json依赖- 典型目录:
app/、routes/、config/ - 核心入口:
public/index.php、bootstrap/app.php
风险类型映射(必做)
每条发现都必须写明:
- 适用的通用类型码:
AUTH/CSRF/LOGIC/XSS/CFG/SESS/FILE等(从你的shared/SEVERITY_RATING.md可用类型码中选) - 这条 Laravel 风险为什么落到该通用类型码(用一句话解释映射逻辑)
必审清单(必做:逐项检查并输出结果)
1) 鉴权与权限保护(AUTH)
必须定位并输出以下证据:
- 受保护路由进入点:
routes/web.php与routes/api.php中的middleware('auth')/middleware('can')/Route::middleware([{value}])->group({value}) - 权限逻辑:
Gate::/Policy/authorize/can/->can({value})的位置证据 - 风险判断:是否存在“已登录但无资源级归属校验”的模式(例如只判断 user 存在,不判断 owner)
- 路由命名与资源绑定:是否存在 Route Model Binding 但未做归属校验
输出要求:
- 若发现缺失:必须给出“缺失位置 + 可能被绕过的请求类型(GET/POST/API)+ 修复建议”
- 若未发现:也必须输出“未发现的判定依据”(例如 except/guard 为空、敏感路由均有 middleware 等)
2) CSRF 与 token 保护(CSRF)
必须定位:
- CSRF middleware:
VerifyCsrfToken或等价中间件 - except 列表:哪些路由被排除
- API 与 Cookie 认证差异:若项目对 API 使用 Cookie/session,需要确认 API 路由是否仍受 CSRF 保护
输出要求:
- 必须覆盖“可能绕过分支”:例如仅部分方法不校验、仅某些 Content-Type 不校验、仅在 AJAX 时跳过等
3) Session 与 Cookie 安全(SESS)
必须定位:
- 登录后会话固定防护:是否存在
session_regenerate_id或 Laravel 对应机制证据 - Cookie flags:
HttpOnly/Secure/SameSite的配置位置(config/session.php或自定义中间件) - logout:退出是否清理 session
4) Eloquent mass assignment(LOGIC)
必须定位并输出数据流链证据:
- request 输入获取:
$request->all()、$request->input({value})、json_decode({value}) - 写入模型点:
Model::create({value})/Model::update({value})/$model->fill({value})/->save() - 模型填充策略:
$fillable/$guarded的配置位置
判定规则:
$request->all()或等价输入直接进入create/fill/update,且模型缺少针对敏感字段的 denylist(或$fillable过宽),则输出风险
5) Blade raw 输出(XSS)
必须定位并输出:
- raw 输出:
{!! {value} !!}、@php以及任何“跳过转义”的指令或回调 - 用户输入来源:来自
$request、request()、数据库字段回填但未转义时的证据
判定规则:
- 若 raw 输出内容存在用户可控字段,且未做
e()或等价 escape,则输出风险映射到XSS或相关模板注入风险(若你项目用到模板表达式执行则映射到TPL)
6) Signed URLs 与签名校验闭环(AUTH 或 CFG)
必须定位:
- 签名 URL 生成:
URL::temporarySignedRoute/URL::signedRoute - 验证中间件:
middleware('signed')或等价校验机制
判定规则:
- 若仅生成但无签名验证中间件,或验证逻辑可被绕过,输出风险映射到
AUTH或CFG
可观测 PoC(必做:框架特效可观测验证框架)
至少给出以下两类其一并写清观察点:
- 鉴权缺失/越权绕过:给出真实路由与 payload 目标(例如切换对象 id)
- CSRF 缺失/绕过:给出真实路由与需要携带/不携带的 token 场景,并说明观察点
PoC 输出要求:
- 必须包含真实路由(从
routes/*.php真实可命中位置抽取) - 必须包含真实字段名(如
csrf字段、或表单 action)
输出完整性检查(强制)
- 输出包含:Laravel 识别证据点
- CSRF/Auth/Session/Mass Assignment/Blade raw/Signed URL 六大块均有“检查结果”
- 每条风险都有:映射类型码 + 位置证据 + 可观测验证框架 + 修复建议
More from 0xshe/php-code-audit-skill
php-codeigniter-audit
CodeIgniter 框架特效安全审计工具。针对 CodeIgniter 的 CSRF、XSS 输出过滤、数据库查询构造、路由与验证器配置、会话 Cookie 安全等机制进行白盒静态审计,并映射到通用漏洞类型体系(CSRF/AUTH/XSS/SQL/CFG/SESS 等)。
35php-thinkphp-audit
ThinkPHP 框架特效安全审计工具。针对 ThinkPHP 常见的鉴权/CSRF/模板转义/ORM 写入(Mass Assignment)/调试与配置暴露等机制进行白盒静态审计,并映射到通用漏洞类型体系(AUTH/CSRF/TPL/XSS/LOGIC/CFG/SESS/SQL 等)。
25php-wordpress-audit
WordPress 框架特效安全审计工具。针对 WordPress 常见 nonce/capability/check_admin_referer、AJAX action、escape/sanitize、重定向、安全上传与远程请求等机制进行白盒静态审计,并映射到通用漏洞类型体系(AUTH/CSRF/XSS/SQL/CFG/SSRF 等)。
22php-symfony-audit
Symfony 框架特效安全审计工具。针对 Symfony 常见 security.yaml、CSRF、Twig/Twig raw、表达式与访问控制等框架机制做白盒静态审计,并将风险映射到通用漏洞类型体系(AUTH/CSRF/CFG/XSS/TPL/LOGIC 等)。
21php-xxe-audit
PHP Web 源码 XXE 审计工具。识别 XML 解析点与实体处理配置,追踪 XML 输入来源与回显,输出可利用性分级、PoC 与修复建议(禁止省略)。
20php-archive-extract-audit
PHP Web 归档解压(Zip Slip/路径穿越)审计工具。识别解压条目名如何与目标目录拼接、是否存在 base dir 约束缺失,输出可利用性分级、可观测 PoC 与修复建议(禁止省略)。
20