用途
php-logging-audit 用于分析 PHP 项目在“安全可观测性”方面的代码与配置缺陷。其核心目标不是泛化讨论“要不要打日志”,而是识别可落地的问题:攻击者能否通过输入污染日志、系统是否把敏感信息写入日志、关键安全事件是否缺失、以及告警/审计链是否被破坏。
主要能力
工具覆盖四类缺陷,并为每一类给出“证据点 + 影响 + 可利用性分析 + 修复建议”:
-
安全事件审计缺失(Audit Gap):识别缺失的安全事件日志点,例如登录失败/成功与账号枚举相关失败原因记录、权限拒绝/越权尝试、密码重置、邮箱变更、管理员角色变更、2FA 变更等关键账户事件、敏感操作(导出数据、下载密钥、删除/修改权限、批量导入)、CSRF 校验失败、会话失效、注销成功等安全相关状态变化。要求输出“应当记录哪些事件”“实际写日志的位置是否存在/是否被绕过”以及缺失导致的真实后果推演。
-
敏感信息写入日志(Sensitive Data in Logs):识别可能把敏感数据写入日志的路径,包括 Authorization 头、Cookie、session_id、JWT 原文、密码/验证码/恢复 token/一次性口令、用户隐私数据在失败栈或 debug 输出中被原样打印、将请求体/参数直接拼进日志消息等。要求输出敏感信息来源、写日志的调用点与 message 构造方式、日志的落地介质。
-
日志注入与伪造(Log Injection / Forging):识别用户可控字符串进入日志消息但未做控制字符净化的问题,例如 \r / \n 进入日志消息导致日志行拆分、可能造成伪造时间戳/级别/请求路径等“假条目”、JSON 或键值对格式的转义缺陷造成结构被破坏。要求输出哪些字段可控、注入进入点、是否存在过滤/归一化。
-
日志与告警链路缺陷(Monitoring & Alert Gaps):识别监控链路缺口,例如关键安全事件只记录 debug/info 未进入可告警通道、日志级别与告警规则缺失、错误处理吞掉异常导致关键事件没有被写入。要求输出日志级别/通道/handler 配置证据及其如何导致告警无法触发或取不到关键证据。
使用方式
工具按以下逻辑识别问题:
- 日志写入 Sink 识别:识别 PHP 的 error_log、syslog、PSR-3/框架的 ->info/->warning/->error/->critical/->debug、Laravel/Symfony/自定义封装的 Log::、logger-> 或项目自己的 logger wrapper、Monolog\Logger 及 handler/channel 相关配置。
- 消息构造与可控性(数据流):对每个日志写入点追踪至少一条链:Source(请求字段/用户输入/敏感 token 来源)-> 中间变量处理(拼接、格式化、json_encode、模板字符串)-> Sink(最终写入日志的 message 参数),并输出可控字段名、进入日志前是否有净化、是否有条件分支导致“只有某些分支才写日志”。
PoC 要求:由于日志缺陷往往需要观察日志输出,必须给出可观测 PoC 框架,至少包括使用真实路由触发日志写入并说明预期日志中出现的字段/格式变化,或使用构造 payload 注入换行/控制字符并说明预期日志会被拆行或出现伪造片段。PoC 必须包含真实路由、用于触发的请求头与 body/参数、以及需要观察的日志现象。
报告输出到 {output_path}/vuln_audit/logging_{timestamp}.md,漏洞条目遵循固定模板,包含严重等级、可达性、影响范围、利用复杂度、可利用性、位置、漏洞类型与证据点、数据流链、可利用前置条件、验证 PoC 与建议修复。
适用场景
适用于对 PHP Web 项目进行安全审计,尤其是需要评估日志与监控环节安全性的场景,例如代码审计、渗透测试中的可观测性评估、安全开发生命周期中的日志规范检查。
限制
工具依赖源码与配置中可证明的证据,对于无法从代码/配置确认的监控链路问题不做推断。PoC 需要能够观察日志输出,部分场景可能需要运维权限或生产环境可见性。具体支持的 PHP 框架版本、依赖环境与安装方式暂未提供。