PHP 业务逻辑漏洞审计(php-logic-audit)
【用途】 分析 PHP 项目中与“业务流程正确性”相关的缺陷,即认证/授权之外的逻辑漏洞。
【主要能力与覆盖范围】
- Mass Assignment:批量赋值导致可越权字段被写入。
- 流程绕过:前置状态缺失或校验可被跳过。
- 状态机缺陷:状态更新不完整、可回滚或不一致。
- 竞态条件:TOCTOU、并发导致多次发放、重复扣款等。
- 越权的业务层校验缺失:与 IDOR 联动,更关注业务归属一致性。
- 付款/退款/异步任务顺序漏洞:异步回调可被伪造或重复处理。
【强制必做审计项】
- Mass Assignment 审计:检测是否将 $_POST/Request->all()/request()->all() 直接写入模型或数据库;敏感字段白名单是否缺失(如 role/is_admin/status/price/owner_id);ORM/框架填充保护是否启用(例如 Laravel $fillable/$guarded)。
- 竞态与幂等审计:同一操作在并发下是否被执行多次(扣款、发货、升级、领取);是否依赖“先查再写”(TOCTOU)且缺少事务/行锁;是否有幂等键与去重(如 payment_id/nonce)。
- 流程绕过审计:是否只在前置页面校验而后端缺少校验;是否依赖前端隐藏字段/按钮限制流程;回调接口鉴权与签名是否可靠、是否可被重复调用。
- 类型比较绕过与弱类型漏洞:是否存在使用 ==/!= 进行鉴权、状态或权限判断;in_array 未设置严格模式(第三参);array_search、strpos 等结果参与条件判断处理不当(如 strpos 返回 0 被当成 false);md5/sha1 用于认证校验且直接用 == 比较摘要而未使用 hash_equals;token/JWT/验证码比较逻辑可被时序推断或类型胶水绕过。
- 认证/账户工作流逻辑:密码重置 token 是否单次使用、是否有明确过期时间、是否与用户绑定;OTP/验证码是否可重放;登录失败次数/账户锁定/速率限制是否在后端实现;账户枚举(错误信息/响应码/耗时差异是否泄露用户存在性);支付/退款回调是否幂等(同一 transaction 是否重复入账/发放)。
【证据要求(强制)】 每条逻辑漏洞必须提供:
- 触发路由与方法(真实路由/HTTP 方法)
- 状态前置条件(登录态/角色/资源状态等)
- 缺陷点位置(业务服务/控制器/回调 handler/队列消费逻辑)
- 状态变化链(输入 -> 校验 -> 写库/调用外部服务 -> 状态更新)
- 与并发/时序相关证据(如事务边界/锁/唯一约束/幂等处理)
【分级与编号】 分级依据详见 shared/SEVERITY_RATING.md;漏洞编号格式为 {C/H/M/L}-LOGIC-{序号}。
【PoC 要求(强制)】 逻辑漏洞 PoC 必须给出请求序列:至少两步,先触发前置条件、再触发漏洞动作,并标注真实路由;若为竞态漏洞,给出并发请求方式与观测点(例如两个 curl 同时发送的步骤)。认证/账户工作流类 PoC 至少两步请求序列,并标注观测点(数据库字段/响应码/重定向/回调执行次数)。弱类型漏洞需给出位置证据、Source、Sink 与 PoC(含对比值构造方式)。
【报告输出】 输出路径为 {output_path}/vuln_audit/logic_{timestamp}.md。条目模板(强制)包括:位置证据、缺陷描述(基于代码语义)、状态变化链、可利用前置条件、请求序列 PoC、修复建议(白名单/事务/锁/幂等/后端二次校验)。
【适用场景与限制】 适用于 PHP Web 项目的业务逻辑安全审计与漏洞验证。其他语言、非 PHP 框架的具体适配方式,以及工具的安装命令、运行环境、收费与价格信息,资料中暂未提供。