PHP SQL 注入审计(php-sql-audit)用于分析 PHP 项目源码,识别 SQL 执行相关代码(PDO/mysqli/ORM),追踪用户输入到 SQL 构造点的路径,验证是否存在 SQL 注入,并输出完整漏洞报告。
用途 面向 PHP Web 源码的 SQL 注入漏洞审计,从源码中识别所有 SQL 执行点并分析注入风险,输出可利用性分级、PoC 与修复建议。
主要能力
- SQL Sink 识别:覆盖 PDO/PDOStatement(如 $pdo->query、$pdo->exec、$pdo->prepare)、mysqli/mysqli_stmt(如 mysqli_query、mysqli_prepare),以及 ORM/DB 包装(如 DB::select(DB::raw(...))、Doctrine createQuery)。
- 危险构造模式识别:SQL 字符串与变量拼接(.、sprintf、vsprintf、implode/join 与 SQL 关键字),动态排序(order by $x、ORDER BY 拼接)等。
- 数据流追踪:追踪用户输入到 SQL 构造点,使用“数据流追踪证据”判定可利用性,不只靠关键字猜测。
- 分级与编号:严重等级参考 shared/SEVERITY_RATING.md,漏洞编号格式为 {C/H/M/L}-SQL-{序号}。
- 强制追踪条件:当参数经过多层传递或 JSON 解码后取字段进入 SQL、SQL 构造点位于基类/工具类/父函数、或存在分支条件导致执行不确定时,必须调用 php-route-tracer 或同等追踪证据。
输入依赖 建议至少提供 routes_{timestamp}.md 与 params_{timestamp}.md(独立落盘时常为 route_mapping/ 目录下)。可选但推荐 route_tracer/ 输出,用于精准判定参数实际使用状态。
使用方式与输出 报告输出到 {output_path}/vuln_audit/sql_{timestamp}.md。报告条目模板要求包含:严重等级(含 CVSS 评分)、可达性、影响范围、利用复杂度、可利用性、位置(file:line 与函数/类)、数据流链(Source → Sink,按路由逐行写出,禁止省略)、可利用前置条件(鉴权要求、输入可控性、触发条件)、证据引用、验证 PoC(可执行 HTTP 请求)、建议修复。
证据引用要求逐项引用 trace 输出中 ## 9) Sink Evidence Type Checklist 的 SQL 行对应证据要点,包括:EVID_SQL_EXEC_POINT(SQL 执行点)、EVID_SQL_STRING_CONSTRUCTION(SQL 字符串构造/拼接)、EVID_SQL_USER_PARAM_TO_SQL_FRAGMENT(用户可控参数到 SQL 片段的映射)。若无法定位任一关键证据要点,漏洞状态只能标记为“⚠️待验证”,不得直接给出“✅已确认可利用”。
修复建议部分要求给出安全写法要点(PDO prepare + bind 且保证 SQL 片段不拼接用户输入),并给出代码搜索语句(rg/grep 风格)用于定位所有同类拼接点。
输出完整性检查要求:至少输出风险统计与每条漏洞完整条目;不出现任何省略占位符;每条漏洞都包含数据流链、可利用前置条件、可执行 PoC、修复建议。
适用场景 适用于需要对 PHP 项目源码做 SQL 注入安全审计、生成漏洞报告与修复建议的安全测试与代码审计工作。
限制 资料未说明具体支持的 PHP 框架版本、运行环境、是否收费以及性能指标;实际执行依赖 routes/params 等输入文件与 php-route-tracer 追踪证据,若缺少关键证据只能标记为待验证。