用途:在出现漏洞告警后、部署生产前、更新依赖时或定期安全检查中,智能分析 npm audit 结果,判断哪些漏洞需要处理、哪些属于可忽略噪音,并给出具体修复命令。
主要能力:
- 运行审计:pnpm audit --json 2>/dev/null || true;若无 package.json 则报告“No Node.js project found”并退出。
- 逐条解析漏洞:判断直接依赖还是传递依赖;区分生产依赖与开发依赖;对传递依赖用 pnpm why <vulnerable-package> 追溯来源;评估漏洞代码路径是否真正被使用(如已用 Clerk 则 JWT 漏洞可能不适用,已净化输出则 Markdown 解析器 XSS 可能不适用)。
- 检查已有 overrides:查看 package.json 中 pnpm overrides 是否已覆盖且版本不低于修复版本,并用 pnpm list <package> 验证。注意该检查仅针对 pnpm 风格 overrides;npm 用根级 overrides,yarn 用 resolutions。
- 查找修复:用 pnpm outdated <parent-package> 和 pnpm info <parent-package> version 判断父包是否有更新。
- 分类:Critical(直接+生产+可利用,立即修复)、High(直接+生产,方便时更新)、Medium(传递+生产,监控父包更新)、Low(仅开发依赖,可忽略)、Overridden(已有覆盖且版本达标,验证即可)、Noise(传递+开发+不可利用,忽略)。
- 推荐动作:直接依赖用 pnpm update <package>@latest;传递依赖可更新父包;无修复时查父包 GitHub issue,必要时才考虑 override;不可利用则记录原因并下次审计复查。
输出格式:安全审计报告,包含汇总、Critical、Should Fix、Monitor、Already Resolved、Noise 与推荐操作清单,并提示更新后再次运行 /audit 验证。
限制与注意:pnpm audit 发现漏洞时返回退出码 1 属预期;即使已有 overrides,pnpm audit 仍可能报告漏洞,需用 pnpm list <package> 验证实际解析版本;部分包可能永远不会修复(已废弃),可考虑替代方案;overrides 可能破坏功能,应少用并充分测试;增改 overrides 后需运行 pnpm install 生效。