← 中文资源

简体中文版本

用提交 SHA 固定 GitHub Actions

把可变的 Action 标签替换为完整提交 SHA,在注释中保留版本,并让 Dependabot 更新固定值。

阅读英文原文

标签是指针,不是版本

actions/checkout@v4 方便但可变。仓库所有者可以移动标签,攻陷仓库的攻击者也能在同一引用下发布新代码。固定完整提交 SHA 可以让工作流只运行经过审查的代码。注释中的标签让人工更新仍然可读。

- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

要使用提交 SHA,而不是附注标签对象的 SHA。GitHub 的 commits API 会把标签名解析为提交。如果引用不是 40 个十六进制字符,它仍然是可变的。

保持固定值更新

固定后的 Action 仍需要安全更新。Dependabot 的 github-actions 生态会创建 PR,同时更新 SHA 和版本注释。像审查其他依赖一样审查这些 PR:阅读发布说明、检查差异、确认工作流仍然通过。永不更新的固定值用标签移动风险换来了未修补漏洞风险。

强制执行策略

一次性清理不够,新工作流会复制旧模式。在 CI 中增加轻量检查:当 uses: 行以标签或分支结尾时失败。只有无法固定时才允许有记录的例外清单,并定期审查。同时减少工作流权限,避免把密钥暴露给来自 fork 的 PR。