tartinerlabs/lockfile-integrity

GitHub: tartinerlabs/lockfile-integrity

检测 PR 中 lockfile 是否在没有 package.json 变更的情况下被修改,及时发现供应链篡改信号。

Stars: 1 | Forks: 0

# Lockfile 完整性检查 **你的 lockfile 改变了,但 `package.json` 没变。为什么?** 这是一个零依赖的 GitHub Action,用于检测 Pull Request 中可疑的 lockfile 修改,这类修改通常会逃过代码审查,从而为供应链攻击打开大门。 支持 `pnpm-lock.yaml`、`package-lock.json`、`yarn.lock` 和 `bun.lock`。 ## 问题所在 仅修改 Lockfile 是 npm 供应链攻击中最容易被忽视的途径之一。攻击者(或受损的 CI 步骤)可以直接向 lockfile 中注入恶意包解析。由于 lockfile 的差异(diff)通常很大且杂乱,审查者很少会逐行检查它们。 此 Action 让那些不可见的变化变得可见,并在有人解释清楚之前阻止 PR 合并。 ## 工作原理 ``` PR opened | v git diff origin/main...HEAD | |__ lockfile changed? | | | |__ package.json also changed? --> Pass (legitimate dependency update) | | | |__ package.json untouched? --> Fail with annotation (possible tampering) | |__ no lockfile changed? --> Skip (nothing to check) ``` ## 快速开始 ``` name: Lockfile Integrity on: pull_request: paths: - pnpm-lock.yaml - package-lock.json - yarn.lock - bun.lock permissions: contents: read jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: fetch-depth: 0 # Required: the action diffs against the base branch - uses: tartinerlabs/lockfile-integrity@v1 with: base-ref: ${{ github.base_ref }} ``` 就这样。该 Action 会自动检测哪些 lockfile 发生了变化。无需配置。 ### 指定特定的 Lockfile 如果你的仓库使用单一的包管理器,你可以明确指定: ``` - uses: tartinerlabs/lockfile-integrity@v1 with: base-ref: ${{ github.base_ref }} lockfile: pnpm-lock.yaml # or package-lock.json, yarn.lock, bun.lock ``` ### 警告而非失败 适用于渐进式推广。为 PR 添加注释但不阻止合并: ``` - uses: tartinerlabs/lockfile-integrity@v1 with: base-ref: ${{ github.base_ref }} fail-on-warning: "false" ``` ### 在后续步骤中使用输出 ``` - uses: tartinerlabs/lockfile-integrity@v1 id: integrity with: base-ref: ${{ github.base_ref }} fail-on-warning: "false" - if: steps.integrity.outputs.tampered == 'true' run: echo "Suspicious lockfiles: ${{ steps.integrity.outputs.lockfiles }}" ``` ## 输入参数 | Input | Required | Default | Description | |-------|----------|---------|-------------| | `base-ref` | Yes | | 用于比较的基础分支(例如 `main`) | | `lockfile` | No | _(自动检测)_ | 要监控的 Lockfile;省略时从更改的文件中自动检测 | | `fail-on-warning` | No | `true` | 是失败检查还是仅发出警告 | ## 输出 | Output | Description | |--------|-------------| | `tampered` | 如果检测到 lockfile 篡改则为 `"true"`,否则为 `"false"` | | `lockfiles` | 被修改的 lockfile 列表,以空格分隔 | ## 要求 Checkout 步骤**必须**使用 `fetch-depth: 0`,以便 Action 能与基础分支进行差异比较。否则,Git 历史记录将不可用,检查将失败。 ## 常见问题 **这能捕获所有供应链攻击吗?** 不能。这只捕获一个特定的信号:仅 lockfile 发生变化。它是一个轻量级的触发器,而不是完整的依赖审计。请将其与 `npm audit`、Socket 或 Snyk 等工具结合使用以进行更深入的分析。 **如果我故意重新生成 lockfile 怎么办?** 在同一个 PR 中触碰一下 `package.json`(即使是仅包含空白的更改也算数),检查就会通过。或者使用 `fail-on-warning: "false"` 来获取警告注释而不是硬性失败。 **它适用于 Monorepo 吗?** 是的。该 Action 会检查仓库中*任何* `package.json` 是否发生更改,因此由工作区依赖项更改引起的 lockfile 更新将通过检查。 ## 许可证 [MIT](LICENSE)
标签:Bun, CI/CD 安全, DevSecOps, GitHub Actions, Lockfile 完整性, NPM 安全, pnpm, PR 检查, Yarn, 上游代理, 云安全监控, 代码审查, 依赖劫持检测, 前端安全, 包管理器, 安全可观测性, 数据可视化, 数据投毒防御, 文档安全, 注入攻击防护, 版本控制, 篡改检测, 结构化查询, 统一API, 网络安全研究, 自动化安全, 自动笔记, 软件开发工具包, 静态分析