WillIsback/caviarder
GitHub: WillIsback/caviarder
一款基于 Rust 的命令行机密脱敏工具,利用 gitleaks 规则集在分享文本前自动识别并替换 API 密钥、token 等敏感信息。
Stars: 0 | Forks: 0
# caviarder
[](https://crates.io/crates/caviarder)
**使用 gitleaks 检测规则从文本中脱敏机密信息。**
`caviarder`(法语意为“脱敏”)是一个快速的 Rust CLI,它从文件或 stdin 读取文本,并将检测到的机密信息(API 密钥、token、密码)替换为占位符。它使用在编译时嵌入的
[gitleaks](https://github.com/gitleaks/gitleaks) 社区维护的规则集
—— 超过 220 种模式。
## 为什么使用
分享配置文件、日志或调试输出时,往往会在你不知不觉中泄露机密信息。`gitleaks` 可以在 CI 期间捕获它们,但并不适合用于临时清理。`caviarder` 填补了这一空白:
- **管道传输任何内容**:`cat file | cav` —— 作用类似 `cat` 但更加安全。
- **提交前检查**:`cav --check file` —— 如果发现机密信息则以退出状态码 1 退出。
- **零配置**:内置 220 多条规则。无需设置,无需服务器,无额外依赖。
## 安装说明
### 从源码安装
```
git clone https://github.com/WillIsback/caviarder.git
cd scrub
cargo build --release
cp target/release/cav ~/.local/bin/
```
需要 Rust 1.70+。
### 从 crates.io 安装
```
cargo install caviarder
```
## 用法
### 脱敏文件
```
cav config.yml
# → 打印脱敏版本到 stdout
```
### 从任意命令通过管道传入
```
cat config.yml | cav
echo "$API_KEY" | cav
env | cav
```
### 保存脱敏后的输出
```
cav config.yml -o safe.yml
# 或
cat config.yml | cav > safe.yml
```
### 检查机密信息(如果发现则以状态码 1 退出)
```
cav --check deploy.sh
echo $? # 1 if secrets were found
```
### 扫描并显示详细统计信息
```
cav --stats entrypoint.sh
# → stderr:按规则统计的脱敏数量
```
### 列出所有检测规则
```
cav --list-rules
```
### 添加自定义规则
创建一个包含你自定义模式的 TOML 文件:
```
[[rules]]
id = "my-app-token"
regex = '''myapp-[A-Za-z0-9]{32}'''
entropy = 3.0
```
然后将其与内置规则结合使用:
```
cav --rules my-rules.toml config.yml
```
## 工作原理
| 层级 | 文件 | 作用 |
|-------|------|------|
| 规则 | `config/gitleaks.toml` | 来自 gitleaks 的 220 多个正则表达式模式(编译时嵌入) |
| 引擎 | `lib.rs` | 按顺序应用规则,可选的 Shannon 熵过滤,捕获组保留 |
| CLI | `main.rs` | clap 参数解析,stdin/文件 I/O,退出代码 |
处理流水线为:**文本 → 正则表达式扫描 → 熵检查 → 替换**。
如果规则具有熵阈值,则仅对 Shannon 熵满足阈值的匹配项进行脱敏 —— 这减少了在短字符串或重复字符串上的误报。
如果规则定义了捕获组 `( )`,则仅对捕获的部分进行脱敏,匹配的其余部分将作为上下文保留:
```
--api-key "sk-abc123DEF456ghi789jkl012mnopqrXYZ"
→ --api-key "[CAVIARDER]"
```
## 与 gitleaks 的区别
| | `gitleaks` | `caviarder` |
|---|-----------|------------|
| 目的 | CI/CD 扫描 | 临时脱敏 |
| 输出 | JSON/CSV 报告 | 输出至 stdout 的脱敏文本 |
| 安装 | Go 二进制文件 + 配置 | 单个 Rust 二进制文件,无依赖 |
| 规则更新 | 手动拉取配置 | 重新编译以刷新 |
## 许可证
MIT
标签:DevSecOps, Python安全, Redis利用, Rust, StruQ, 上游代理, 可视化界面, 安全合规, 敏感信息脱敏, 文本处理, 网络代理, 网络流量审计, 通知系统