mcpField
C
check-npm

check-npm

github.com/grafana安全2952.9k 次安装1 天前更新
代码仓库

关于 check-npm

只读审计 npm、yarn 或 pnpm 工作区供应链设置的技能。它检查工具版本、生命周期脚本控制、依赖协议和最低发布等待时间,并提供审计结果及配置修正示例。

主要功能

  1. 01识别包管理器
  2. 02检查工具最低版本
  3. 03审计生命周期脚本控制
  4. 04标记不安全的依赖协议
  5. 05检查最低发布等待时间
  6. 06附修正示例报告结果

适用场景

  1. 01审查包管理器安全设置
  2. 02检查生命周期脚本是否受限
  3. 03查找非仓库依赖引用
  4. 04安装前验证发布等待策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/grafana/skills --skill check-npm

安装后在 Claude Code 中输入/check-npm确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
fix-snippets.md
managers.md
protocols.md

详细介绍

npm / yarn / pnpm 供应链审计

对工作区根目录进行只读审计。不要修改任何文件。

0. 检测包管理器

test -f package.json || { echo "STOP: no package.json at workspace root"; exit 1; }
jq -r '.packageManager // "unset"' package.json
ls -1 yarn.lock package-lock.json pnpm-lock.yaml 2>/dev/null || true

如果没有 package.json,则停止。优先级:packageManager → 锁文件 → 默认使用 npm。

1. 工具版本

npm --version    # required ≥ 11.15.0
yarn --version   # required ≥ 4.14.0
pnpm --version   # required ≥ 11.0.0

使用 semver 比较。验证固定的 packageManager 是否达到最低要求。

管理器最低版本
npm11.15.0
yarn4.14.0
pnpm11.0.0

2. 禁用生命周期脚本

grep -E '^ignore-scripts=' .npmrc 2>/dev/null
grep -E 'enableScripts:' .yarnrc.yml 2>/dev/null
grep -E 'strictDepBuilds:|dangerouslyAllowAllBuilds:|allowBuilds:' pnpm-workspace.yaml 2>/dev/null
管理器通过失败
npm.npmrc 中有 ignore-scripts=true缺失或为 false
yarnenableScripts: false 或未设置此键enableScripts: true
pnpm ≥ 11strictDepBuilds 未设置或为 true,dangerouslyAllowAllBuilds 未设置或为 false,且 allowBuilds 未设置或为 []strictDepBuilds: false、dangerouslyAllowAllBuilds: true 或 allowBuilds 非空
pnpm 10.npmrc 中 ignore-scripts=true 或 strictDepBuilds: true两者都不满足

pnpm 11+ 会忽略 .npmrc 和 package.json#pnpm 中的脚本设置。pnpm 10 / yarn 的边缘情况:references/managers.md。

3. 不安全的依赖协议

注册表:

grep -E '^allow-git=' .npmrc 2>/dev/null
grep -E 'approvedGitRepositories:' .yarnrc.yml 2>/dev/null
grep -E 'blockExoticSubdeps:' pnpm-workspace.yaml 2>/dev/null

扫描工作区中的 package.json 文件(dependencies、devDependencies、optionalDependencies、peerDependencies)。优先按照 references/protocols.md 发现工作区成员(pnpm-workspace.yaml / 根目录 workspaces / lerna / rush),然后只扫描这些清单文件。回退方式(可能会误匹配非工作区清单文件):

find . -name package.json -not -path '*/node_modules/*'

仅允许安全值: semver 范围、workspace:、patch:、指向 semver 的 npm: 别名。其他所有值(git URL、tarball、user/repo 简写、file:、link:、exec: 等)均标记为 path → name → value (protocol)。

管理器通过失败
npmallow-git=none 或 root缺失或为 all
yarnapprovedGitRepositories: [] 或 Grafana 范围的列表,或者未设置但有策略注释且扫描结果干净含不安全条目或允许列表范围过宽
pnpm ≥ 11blockExoticSubdeps 未设置或为 truefalse
pnpm 10.xblockExoticSubdeps: true未设置(默认值为 false)或为 false

协议检测顺序和 yarn 配置详情:references/protocols.md。

4. 最低发布时间 ≥ 3 天

3 天 = 4320 分钟。npm 使用天;yarn 和 pnpm 使用分钟。

grep -E '^min(imum)?-release-age=' .npmrc 2>/dev/null
grep -E 'npmMinimalAgeGate:' .yarnrc.yml 2>/dev/null
grep -E 'minimumReleaseAge:|minimumReleaseAgeStrict:' pnpm-workspace.yaml 2>/dev/null
管理器通过失败
npmmin-release-age ≥ 3缺失
yarnnpmMinimalAgeGate ≥ 4320 分钟缺失或低于要求
pnpm ≥ 11minimumReleaseAge ≥ 4320未设置(默认值为 1440)或低于要求
pnpm 10minimum-release-age / minimumReleaseAge ≥ 4320缺失

如果 pnpm 11 中的 minimumReleaseAgeStrict: false,则标记出来。

5. 报告

#检查项状态详情
0包管理器(npm / yarn / pnpm)版本:x.y.z(如已设置固定版本:y.y.y)
1工具版本 ≥ 最低要求PASS / FAILactual 与 required 对比
2已禁用脚本PASS / FAIL配置行或 "missing"
3不安全的依赖协议PASS / FAIL注册表状态 + 已标记条目
4最低发布时间 ≥ 3 天PASS / FAIL配置 + 值

仅使用 PASS / FAIL,不要使用表情符号。

对于每项 FAIL,提供一个可直接粘贴的修复方案:

# npm — .npmrc
ignore-scripts=true
allow-git=none
min-release-age=3
# pnpm 11 — pnpm-workspace.yaml
strictDepBuilds: true
dangerouslyAllowAllBuilds: false
allowBuilds: []
minimumReleaseAge: 4320
blockExoticSubdeps: true
# yarn — .yarnrc.yml
npmMinimalAgeGate: 4320

更多修复方案(升级工具、yarn git 允许列表、pnpm 10):references/fix-snippets.md。

如果全部通过:输出 "All checks passed." 并停止。

评论

支持 Markdown