SuperAPI AI 工具集

js-security-audit

安全与审计

查看项目

更新于 10-15 13:58

技能介绍

用途

js-security-audit 用于对 JS/TS 项目执行一次覆盖 5 个领域的安全审计,支持 npm、yarn 或 pnpm。审计结果按领域生成通过/失败报告,并附带 file:line 引用。

适用场景包括:

  • 新仓库加固——核查 .npmrc、lockfile、2FA、精确版本锁定
  • 审查新增或升级依赖的 PR
  • 搭建 CI 安全门禁(npm ci --ignore-scripts、lockfile-lint、audit gate)
  • 供应链攻击新闻出现后(如 Axios March 2026、Shai-Hulud 等)
  • 生产部署前的定期安全审查

主要能力

技能会先通过检查存在的 lockfile 判断包管理器:package-lock.json(npm)、yarn.lock(yarn)、pnpm-lock.yaml(pnpm),然后使用对应的命令。

审计覆盖以下 5 个领域:

  1. 项目配置:检查 .npmrc、lockfile 是否存在、版本锁定、.gitignore、scoped packages。
  2. 依赖卫生:运行 audit,扫描 lockfile diff 中意外出现的包,检查 latest 标签与琐碎依赖。
  3. CI/CD 流水线:验证使用 npm ci 而非 npm install、--ignore-scripts 配合选择性重建白名单、audit gate、lockfile-lint、SHA 固定的 actions、SBOM、ESLint 安全配置。
  4. Dependabot:检查 .github/dependabot.yml、告警路由、critical/high 的 P1 SLA、分组配置。
  5. 事件响应准备:验证团队是否有文档化的 playbook、IOC 监控、凭据轮换 runbook。

技能还引用以下文档:audit-checklist.md(完整 MUST/SHOULD/SHOULDN'T 清单)、eslint-security.md(SAST ESLint 模板与规则表)、incident-playbook.md(5 步受损依赖响应)、package-manager.md(npm/yarn/pnpm 命令等价与工具)。

使用方式

技能需要 Bash 来运行 npm audit 等命令。为避免每次审计都弹出提示,可在 ~/.claude/settings.json(或项目 .claude/settings.json)中添加权限白名单:

{
  "permissions": {
    "allow": [
      "Bash(npm audit:*)",
      "Bash(npm outdated:*)",
      "Bash(npm explain:*)",
      "Bash(npm list:*)",
      "Bash(npm view:*)",
      "Bash(yarn npm audit:*)",
      "Bash(yarn outdated:*)",
      "Bash(yarn why:*)",
      "Bash(pnpm audit:*)",
      "Bash(pnpm outdated:*)",
      "Bash(pnpm why:*)",
      "Bash(npx lockfile-lint:*)",
      "Bash(npx npq:*)"
    ]
  }
}

这样审计命令可静默执行,其他操作(写入、删除等)仍需确认。

交互风格

  • 从 lockfile 检测包管理器,不默认假设 npm
  • 优先标记关键发现(受损包、缺失 audit gate、仓库中的密钥),再列警告
  • 每条发现都引用文件路径或配置键
  • 每条发现都附带修复片段,而不只是“去修”
  • 区分 MUST(阻止合并)、SHOULD(下个迭代)与 SHOULDN'T(反模式)

规则分级

  • Critical:仓库中存在密钥、缺失 lockfile、生产依赖使用 latest 标签、CI 中无 npm audit gate、发布者未启用 2FA
  • Warning:缺失 .npmrc 加固、无 Dependabot 配置、无 SBOM 生成、缺失 ESLint 安全配置
  • Info:无 npq 安装前审查、无 Socket.dev/Snyk 集成

注意事项

  • AI 幻觉包名:LLM 有时会建议 npm 上不存在的包,攻击者会注册这些名称并植入恶意软件。安装前务必在 npmjs.com 核实,尤其是聊天建议中不常见的名称。
  • CI 中 npm install 与 npm ci 的区别:npm install 在 lockfile 与 package.json 不一致时会重写 lockfile,静默拉取新版本;npm ci 则会让构建失败。CI 必须使用 ci。
  • --ignore-scripts 也会阻止合法包:esbuild、sharp、prisma、bcrypt 需要 postinstall 脚本下载二进制或生成客户端。应使用 --ignore-scripts 后 npm rebuild <allowlist>,并记录每个包进入白名单的原因。
  • GitHub Actions 按 SHA 固定,而非 tag:actions/checkout@v4 跟随 tag,tag 可被重新指向恶意代码。应使用完整 40 位 SHA 并附注释说明 tag。
  • Lockfile diff 是供应链金丝雀:一个为修错别字而新增 200 个传递依赖的 PR,或把已有包的 resolved URL 从 registry.npmjs.org 改走他处,都是危险信号,合并前需调查。
  • min-release-age 是 npm v11+:在旧版 npm 上作为 SHOULD 提及,但不因此判定审计失败。
  • 认证代码中的 Math.random() 是 critical 而非 warning:用 Math.random() 生成的验证码、会话令牌、密码重置令牌可被预测,应强制使用 crypto.randomInt()。
  • 不允许以“减少噪音”为由禁用 Dependabot:正确做法是对 minor/patch 更新分组,而不是静默告警。

输出

生成审计报告,包含总体 Pass/Fail、按领域的状态表(Critical/Warnings/Info 计数)、Critical Findings、Warnings 与 Remediation Priority(先修 critical 再合并,下个迭代处理 warnings,Info 视时间处理)。

限制

资料未提供该技能的安装命令、收费方式、支持平台或运行环境要求,这些信息暂未提供。