PHP CSRF 审计(php-csrf-audit)用于分析 PHP 项目源码中所有可能造成状态变更的接口(POST/PUT/PATCH/DELETE,或含副作用的 GET)是否实现了 CSRF 防护,包括 token 校验、SameSite/CORS 配合、双提交 cookie 等。
用途 面向 PHP Web 源码的安全审计,重点检查状态变更接口的 CSRF 防护是否完整、是否存在可绕过的校验分支,并给出可利用性判断与修复方向。
主要能力
- 状态变更入口识别:识别路由的 HTTP 方法,以及是否包含副作用(写数据库、更新权限、发起交易、触发任务等)。
- CSRF token 生成分析:识别 token 来源(session/cookie/random)、字段名、注入到表单或请求头的方式。
- CSRF token 校验分析:定位后端验证逻辑位置与条件,检查是否只校验登录用户、是否存在绕过分支。
- 校验绕过检查:识别“某些分支不校验”“仅校验特定 Content-Type”“只在 AJAX 时校验”等情况。
- 同源/跨站辅助分析:检查 SameSite、CORS/跨域设置、Referer/Origin 校验,并提示单独依赖 Referer/Origin 可能不稳。
- 数据流追踪:至少追踪一条链,从 token 来源(如 $_SESSION['csrf'])到前端输出,再到后端 token 接收($_POST/headers)与校验(比较/哈希校验)。
分级与编号 严重程度分级详见 shared/SEVERITY_RATING.md。漏洞编号格式为 {C/H/M/L}-CSRF-{序号}。
报告输出 输出到 {output_path}/vuln_audit/csrf_{timestamp}.md。
漏洞条目模板(强制) 每条漏洞必须包含:
- 位置证据(路由 + 校验函数/中间件位置)
- 数据流链(token 生成 -> 前端携带 -> 后端校验)
- 可利用前置条件(是否需要登录;攻击者能否构造页面;浏览器同站策略)
- 验证 PoC(必须包含真实路由与请求结构;若需配合登录,给出 cookie/登录态说明)
- 建议修复(token 校验放置、失败响应策略、字段名统一、对绕过分支加覆盖)
证据引用(强制) 每条 CSRF 风险必须逐项引用 trace 中的证据点(允许状态为待验证,但证据引用必须存在):
- EVID_CSRF_STATE_CHANGE_HANDLER_EXEC:状态变更 handler 的执行证据(trace 的分支路径证据)
- EVID_CSRF_TOKEN_SOURCE:CSRF token 来源与生成证据(session/cookie/random 等)
- EVID_CSRF_TOKEN_RECEIVE:CSRF token 在请求中的接收/进入校验逻辑的位置证据(trace 的参数进入点/分支证据)
- EVID_CSRF_TOKEN_VERIFY:CSRF 校验比较/哈希判断位置证据(trace 的条件与早退证据)
- EVID_CSRF_BYPASS_BRANCH:绕过分支证据(如仅校验某些 Content-Type 或仅对 AJAX 校验)
证据缺失处理(强制) 若 trace 契约校验失败或缺失上述 1~5 任一关键证据点,该风险只能标记为 ⚠️待验证,不得给出“已确认可利用”的断言。
适用场景 适用于对 PHP 项目进行源码级 CSRF 安全审计、漏洞挖掘与修复验证,尤其适合需要结构化输出漏洞证据链与 PoC 的场景。
限制 该工具依赖路由追踪证据(来自 php-route-tracer);关键证据缺失时无法确认可利用性,只能标记待验证。关于具体安装方式、运行命令、支持平台与收费情况,资料中暂未提供。