仓库安全扫描 是做什么的?
扫描目标仓库的高信号安全漏洞并生成报告。
功能(MVP)
- 密钥扫描:使用 gitleaks(本地扫描;日志中密钥已脱敏)
- 依赖项漏洞扫描:使用 osv-scanner(将依赖项与 OSV 数据库匹配)
输出:
report.md—— 人类可读摘要summary.json—— 机器可读摘要- 原始工具输出(
gitleaks.json、osv.json)及日志
为何选择此技术栈(信号/噪音)
- gitleaks:默认配置强大,速度快,通过
.gitleaks.toml/.gitleaksignore可轻松抑制误报。 - osv-scanner:通过 OSV 进行准确的依赖项漏洞匹配(生态系统支持广泛,通常比各生态系统的“审计”命令噪音更低)。
(其他扫描器如 Semgrep/SAST 和特定语言审计工具可在后续通过显式 --deep 模式添加,避免 CI 失败时产生过多噪音。)
安全性
- 对文件执行只读扫描。
- 不上传源代码。
- gitleaks 输出已脱敏(
--redact),报告不会打印密钥。 - osv-scanner 默认使用网络访问查询 OSV(并可能访问 deps.dev 获取包元数据)。它发送的是 依赖元数据,而非源代码。
使用方法
本地使用
在当前仓库中:
# 扫描当前仓库并将输出写入 .repo-security-scan/out
bash scripts/repo-security-scan/scan.sh --repo .
# 扫描其他仓库
bash scripts/repo-security-scan/scan.sh --repo /path/to/target --out /tmp/repo-security-scan-out
# 查看报告
cat .repo-security-scan/out/report.md
演示
bash scripts/demo.sh # 扫描当前仓库
bash scripts/demo.sh /path/repo # 扫描目标仓库
输出
在输出目录中(默认:<技能套件>/.repo-security-scan/out):
report.mdsummary.jsongitleaks.json、gitleaks.logosv.json、osv.log
退出码:
0无发现1发现漏洞2扫描器错误(缺少工具、执行失败)
配置 / 允许列表
扫描具体项目时,优先使用仓库本地配置:
- gitleaks:
<仓库>/.gitleaks.toml<仓库>/.gitleaksignore
- osv-scanner:
<仓库>/osv-scanner.toml(仅适用于该目录)
本技能套件也包含保守的默认配置,位于:
.repo-security-scan/gitleaks.toml.repo-security-scan/.gitleaksignore.repo-security-scan/osv-scanner.toml
强制指定特定的 osv-scanner 配置文件:
bash scripts/repo-security-scan/scan.sh --repo /path/repo --osv-config /path/to/osv-scanner.toml
安装前提
- macOS:
brew install gitleaks osv-scanner jq
- Ubuntu:
sudo apt-get update && sudo apt-get install -y jq- 从发布版安装 gitleaks 和 osv-scanner,或通过
go install编译。