clwg/npm-git-history

GitHub: clwg/npm-git-history

一款通过提取 npm 包及其依赖树的 git 提交历史并运行启发式风险检测,帮助识别供应链安全隐患的命令行审计工具。

Stars: 0 | Forks: 0

# npm-git-history 从 npm 包的源仓库中提取提交历史,并可选择对其运行咨询性供应链风险启发式算法。 给定一个包名,该工具会从其 npm 元数据中解析出该包的源仓库,对其进行克隆,并分析最近的提交历史(作者、日期、主题)。它可以处理包的整个依赖树,从而一次性审计整个供应链。 ![Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2f08407b60092225.png) ![Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f284abc62f092231.png) ## 环境要求 - [Node.js](https://nodejs.org/) 18+ - `npm` 和 `git` 需要在你的 `PATH` 中可用 ## 安装说明 ``` git clone && cd npm-git-history npm install ``` 然后,该工具会通过 `tsx` 直接运行 TypeScript 代码 ### 可选:将 CLI 安装到你的 `PATH` 中 要将 `npm-git-history` 安装到你的 PATH 中 ``` npm run build # bundle source to dist/ via tsup npm install -g . # install to PATH ``` ## 用法 全局安装后: ``` npm-git-history [options] ``` 或者,通过 `tsx` 从源码运行: ``` npx tsx npm-git-history.ts [options] ``` ### 示例 如果已安装到你的 PATH 中,请将 `npm-git-history` 替换掉 `npx tsx npm-git-history.ts`。 ``` # 包的最近 commit 历史 npx tsx npm-git-history.ts left-pad # 更多 commit,包括写入到 JSON 的 monorepo-aware resolution npx tsx npm-git-history.ts @babel/core --limit 50 --json # 使用自定义 cooldown window 运行 supply-chain risk heuristics npx tsx npm-git-history.ts some-package --risk --cooldown 21 # 审计包及其 dependency tree 至 depth 2,使用 shallow clones 提升速度 npx tsx npm-git-history.ts express --deps --dep-depth 2 --depth 50 ``` ## 选项 | 选项 | 描述 | | --- | --- | | `--limit N` | 要显示的提交数量(默认为 `20`) | | `--all` | 显示所有提交(覆盖 `--limit`) | | `--full` | 包含完整的提交正文,而不仅仅是主题行 | | `--depth N` | `git clone` 深度(默认为:完整历史)。例如使用 `100` 来加快速度。 | | `--risk` | 运行防御性供应链启发式算法并打印风险报告 | | `--cooldown N` | cooldown 信号的新鲜度窗口(以天为单位)(默认为 `14`) | | `--deps` | 同时解析并分析依赖树(隐含 `--risk`) | | `--dep-depth N` | 最大传递依赖深度(默认为:无限制) | | `--max-deps N` | 分析的依赖项数量上限(默认为 `100`,`0` = 无上限) | | `--concurrency N` | 使用 `--deps` 时的并行包分析数量(默认为 `4`) | | `-v`, `--verbose` | 为每个依赖项输出按阶段(克隆/日志/风险)的进度流 | | `--json` | 将 JSON 写入到 `/.json`(而不是输出到 stdout) | | `--html` | 将自包含的 HTML 报告写入到 `/.html` | | `--out-dir DIR` | 写入 `--json`/`--html` 报告的目录(默认为 `output`) | | `-h`, `--help` | 显示帮助信息 | ## 输出格式 - **文本**(默认)- 输出到 stdout 的格式化报告。 - **JSON** (`--json`) - 完整的分析结果,包括依赖图(`dependencies`/`requiredBy` 边)以及每个包的风险发现。 - **HTML** (`--html`) - 一个可以在浏览器中打开的独立自包含文件。 ## 供应链风险分析 使用 `--risk`(或 `--deps`,它会隐含该选项)时,该工具会获取 npm 发布元数据,并在提交历史中运行一组启发式信号。每个信号都会对整体**得分**产生影响,该得分会映射到一个大致的风险级别: | 级别 | 得分 | | --- | --- | | `LOW` | `< 3` | | `ELEVATED` | `3–4` | | `HIGH` | `>= 5` | ### 信号 | 代码 | 等级 | 标记内容 | | --- | --- | --- | | `FRESH_PUBLISH` | warn | 最新版本在 cooldown 窗口内发布——即太新了,可能尚未经过审查。 | | `DORMANT_REVIVAL` | warn | 在最近一次提交之前有一段很长的静默期(发布前的突然恢复)。 | | `NEW_AUTHOR_IDENTITY` | high | 最近的提交作者未出现在较早的历史记录中。 | | `AUTHOR_NOT_MAINTAINER` | info | 最近的提交作者不是列出的 npm 维护者。 | | `CLUSTERED_TIMESTAMPS` | info | 许多提交之间的间隔在 ~2 秒内(可能是脚本生成/伪造的历史记录)。 | 当使用 `--deps` 时,该工具会克隆已解析依赖树中每个依赖项的仓库,这可能会很慢且占用大量磁盘空间。请使用 `--dep-depth`、`--max-deps` 以及较浅的 `--depth` 来限制审计范围。
标签:GNU通用公共许可证, MITM代理, Node.js, WebSocket, 依赖分析, 暗色界面, 网络安全研究, 自动化攻击