PHP NoSQL 注入审计(php-nosql-audit)用于分析 PHP 项目源码,识别用户输入如何进入 NoSQL 查询条件,并检测 operator 注入导致的鉴权绕过或数据泄露。
用途 面向 PHP Web 源码的安全审计,重点覆盖 MongoDB/DocumentDB 等 NoSQL 查询场景,查找由用户输入进入查询结构而引入的注入风险。
分级与编号 漏洞严重程度分级与编号规则详见 shared/SEVERITY_RATING.md,漏洞编号格式为 {C/H/M/L}-NOSQL-{序号}。
必检 Sink(强制) 常见于 MongoDB 驱动/ODM:collection->find($filter);findOne($filter) / update($filter, {value}) / delete($filter);where($condition) 或 ->filter({value});以及将用户输入拼入查询数组/表达式的封装函数。
必检危险模式(强制) 必须输出以下判断证据:用户输入直接作为 filter/condition 数组的一部分(尤其是 json_decode 的结果);存在“把用户输入当成结构化条件”的行为,而未强制类型/白名单;query 中包含可能被滥用的运算符字段:$ne/$gt/$lt/$or/$and/$where/$regex。
tracer 触发条件 当用户输入是 JSON/数组/嵌套结构,且进入查询构造前有多层封装时,必须追踪到最终 sink。
报告输出与条目模板 报告输出路径为 {output_path}/vuln_audit/nosql_{timestamp}.md。每条漏洞必须包含:位置证据(查询构造函数/最终 find/update 调用)、数据流链(输入解析 -> 类型 -> 查询条件)、可利用前置条件(鉴权状态/需要登录与否/能否改变查询操作符)、验证 PoC(必须真实路由与真实参数名;payload 为结构化 NoSQL 条件示例)、修复建议(严格字段 allowlist + 强制类型 + 避免把用户输入当作查询表达式)。
证据引用(强制) 每条 NoSQL 注入疑似漏洞必须逐项引用 trace 输出中 ## 9) Sink Evidence Type Checklist 的 NOSQL 行对应证据要点(允许状态为待验证,但证据引用必须存在):EVID_NOSQL_QUERY_CONSTRUCTION:NoSQL 查询构造点证据(对应 find/update/delete 或 query builder 执行点);EVID_NOSQL_USER_INPUT_INTO_QUERY_STRUCTURE:用户输入进入查询条件结构的证据(可控字段进入 filter/where 的结构);EVID_NOSQL_OPERATOR_INJECTION_FIELDS:operator 注入字段证据($ne/$gt/$or/$where/$regex 等)。
tracer 证据缺失处理(强制) 若无法定位上述 1~3 任一关键证据要点,该漏洞状态只能标记为 ⚠️待验证,不得直接给出 ✅已确认可利用。
适用场景与限制 适用于使用 MongoDB/DocumentDB 等 NoSQL 数据库的 PHP 项目源码审计,尤其涉及用户输入进入查询条件的路由与封装函数。资料未提供具体安装方式、依赖要求、收费模式与平台信息,暂未提供。