shipcheck — 预发布个人信息和密钥检查
shipcheck 是一个预发布安全网。在运行 npm publish、clawhub publish 或将仓库公开之前,运行它以捕获可能会后悔发布的内容:绝对路径、内部 IP、Tailscale 主机名、API 密钥、内部项目代号和 Markdown 中的个人信息泄露。
它不是:
- 替代手动审查
- 完整的密钥扫描器(gitleaks / trufflehog 覆盖更多)
- 安全审计
它是发布前多一双眼睛。
何时使用此技能
当用户即将发布或推送内容时触发此技能:npm publish / npm publish --dry-run、clawhub publish ./my-skill ...、git push 到新公共仓库、“检查泄露”、“是否安全分享?”、“扫一下个人信息”、“发布前体检”
安装
npm i -g @symbolstar/shipcheck # 或一次性 npx -y @symbolstar/shipcheck
运行
npm 包(默认模式)- 只扫描实际发布的文件,解析 package.json.files、.npmignore、.gitignore 静态文件(不调用 npm pack)。
cd /path/to/npm-package
shipcheck
技能文件夹 / 通用仓库
shipcheck --scan-mode=dir ./path/to/skill-or-repo
常用标志
shipcheck --scan-mode=dir|npm # 默认:npm
shipcheck --allow # 确认发现的 id
shipcheck --config ./shipcheck.config.json
它可以捕获的内容
类别 示例 严重性
密钥 AWS 密钥、GitHub PAT(ghp_/gho_/ghu_/ghs_/ghr_)、OpenAI sk-…、Anthropic sk-ant-…、Google AIza…、Slack xox[bp]-…、JWT、PEM/SSH 私钥(~30 条规则) 严重
身份 电子邮件、中国移动 + E.164、/Users// & /home// 绝对路径、SSH 指纹 高
基础设施 RFC1918 IPs、Tailscale CGNAT 100.64/10、
.tail.ts.net、.lan/
.local、私有 Git 远程仓库 高
业务 用户定义的 forbidden_terms 从 shipcheck.config.json(代号、内部产品名称...) 中
软自然语言 中文第一人称个人上下文在 .md(我家 / 我老板 / 我同事 + 关系词) 中
二进制文件 *.png/.jpg/.mp4/.zip/.pdf > 50 KB 在发布集合中 警告
推荐工作流程
# 1. 运行它
shipcheck
# 或:shipcheck --scan-mode=dir .
# 2. 分析发现
- 真实泄露 → 修复文件
- 假阳性 → 添加到 shipcheck.config.json allow / forbidden_terms
# 3. 重新运行直到 0 严重 / 高
shipcheck
# 4. 发布
npm publish
# 或:clawhub publish ./skill --slug ...
退出代码
代码 含义
0 无发现,或仅 allow-listed / 信息 / 警告
1 一个或多个严重 / 高 / 中等发现 — 不发布
使用退出代码在 CI 或 prepublishOnly 中:{ "scripts": { "prepublishOnly": "shipcheck && npm run build && npm test" } }
配置(可选)
shipcheck.config.json 在项目根目录中:{
"forbidden_terms": ["AcmeInternalCodename", "ProjectStarfish"],
"allow": [ "rule:identity.absolute-home:fixtures/golden/01/setup.md#L12" ],
"scanMode": "npm"
}
链接
npm:https://www.npmjs.com/package/@symbolstar/shipcheck
源代码:https://github.com/SymbolStar/shipcheck (公共镜像 — 主要开发在本地仓库)
作者:SymbolStar