SuperAPI AI 工具集

secure-npm-package

通用与其它

查看项目

更新于 10-15 22:19

技能介绍

用途:为 npm 包建立安全的发布流程,抵御供应链攻击。核心机制是让 npm 令牌不复存在(无可窃取)、发布只能来自一个固定 CI 工作流,且每次发布仍需维护者用 2FA 手动批准。配套文章见 evilmartians.com 上的相关手记。

主要能力与流程:技能按严格顺序执行——先静默收集项目事实(读取根 package.json、识别 monorepo 工作区、解析 GitHub owner/repo、包管理器与版本、是否已发布、标签格式、构建步骤、现有工作流);把所有问题一次性问完(冷却天数 1 或 3 天、是否把构建工具移入 dependencies、缺失的 repository 字段等);再交代只能在 npmjs.com 与 github.com 上手动完成的设置,并提供解析后的直达链接和具体填写值,等待用户确认全部改完;最后才运行 CLI 并修改仓库文件。

设置要点:每个公开包在 npm 上配置 Trusted Publisher(GitHub Actions、仓库、工作流文件名 publish.yaml、仅允许 npm stage publish)、要求 2FA 并禁止令牌;删除旧的 NPM_TOKEN;组织启用全员 2FA;限制只有管理员可创建标签;开启不可变发布。仓库侧新增 publish.yaml,publish 任务不安装任何依赖、不用缓存、仅用 checkout/setup-node/download-artifact,构建在独立任务并通过 artifact 传递,所有安装与发布加 --ignore-scripts,用 npm stage publish 而非 npm publish;用 zizmor 本地检查并修复发现,新增 CI 静态检查工作流;配置依赖冷却(npm min-release-age 3 等);确保本地禁用 postinstall 脚本。

适用场景:新建或加固 npm 包发布、monorepo 多包发布、移除旧 NPM_TOKEN 流程、需要 provenance 与人工批准的发布。

限制与注意:仓库设置与 npm 设置只有用户本人能改,必须先于文件改动完成;未发布的包需先手动首次发布(npm publish --ignore-scripts,scoped 包加 --access public),再补配 Trusted Publisher;monorepo 中每个公开包都要单独配置;若依赖 pnpm 专有特性(如 workspace: 协议、beforePacking)需改用 pnpm stage publish,并需先确认其版本支持。技能的具体安装方式与价格暂未提供。