tianwater-QAQ/logscrub
GitHub: tianwater-QAQ/logscrub
logscrub 是一个零依赖的轻量级 CLI 与 Python 库,用于在将文本粘贴到 LLM、issue 或聊天之前自动脱敏其中的 API 密钥和 PII 数据。
Stars: 0 | Forks: 0
# logscrub
在你将文本粘贴到 LLM、提交到 GitHub issue 或在聊天中分享日志**之前**,脱敏其中的机密信息和个人身份信息(PII)。
我们都有过这样的经历:把堆栈跟踪或 `.env` 文件复制到 ChatGPT 中进行调试,结果在这个过程中悄悄泄露了 API key。`logscrub` 是一个微小且无依赖的过滤器,它能捕获常见的敏感信息并将其替换为清晰的占位符。
```
$ cat app.log | logscrub --stats
logscrub: redacted 5 item(s): openai_key=1, secret_assignment=1, email=1, ip=1, credit_card=1
ERROR auth failed
OPENAI_KEY=[REDACTED:openai_key]
user [REDACTED:email] from [REDACTED:ip]
password=[REDACTED:secret_assignment]
card [REDACTED:credit_card]
```
## 安装
```
pip install logscrub # once published to PyPI
# 或者,从 source:
pip install .
```
## 作为 CLI 使用
```
cat app.log | logscrub # stdin -> stdout
logscrub app.log -o clean.log # file -> file
logscrub app.log --stats # also print a summary to stderr
cat app.log | logscrub --keep email,ip # leave emails and IPs alone
```
## 作为库使用
```
from logscrub import scrub
result = scrub('OPENAI_KEY=sk-proj-... contact me@example.com')
print(result.text) # 'OPENAI_KEY=[REDACTED:openai_key] contact [REDACTED:email]'
print(result.findings) # Counter({'openai_key': 1, 'email': 1})
print(result.total) # 2
```
## 它能捕获的内容
| 类别 | 示例 |
|---|---|
| API keys / tokens | OpenAI (`sk-…`)、GitHub (`ghp_…`)、AWS (`AKIA…`)、Google (`AIza…`)、Slack (`xox…`)、Stripe (`sk_live_…`)、Twilio (`SK…`)、SendGrid (`SG.…`) |
| Auth | `Bearer …`、JWTs (`eyJ….….…`) |
| 密钥 | `-----BEGIN … PRIVATE KEY-----` 块 |
| 命名值 | `password = …`、`api_key: …`、`client_secret=…`(值被脱敏,键名保留) |
| PII | 电子邮件、IPv4 地址、信用卡号 |
为了保持较低的误报率:
- **信用卡**仅在通过 [Luhn](https://en.wikipedia.org/wiki/Luhn_algorithm) 校验时才会被脱敏。
- **IPv4** 必须具有有效的八位组(因此 `999.1.1.1` 或版本号字符串将被忽略)。
这是一个实用的过滤器,并非安全保证——在分享之前,请检查任何敏感内容。在 `logscrub/patterns.py` 中添加检测器只需一行代码;欢迎提交 PR。
## 测试
```
pip install pytest && pytest
```
## 许可证
[MIT](LICENSE) © Tianwater
标签:LLM辅助, PII过滤, Python, 敏感信息脱敏, 无后门, 逆向工具