一款功能强大的白盒敏感信息扫描工具,支持自定义配置规则,具有图形化界面,可扫描各种类型代码仓、配置文件、文本等,检测密钥以及个人隐私数据。
- 多文件类型支持: 支持 100+ 种文件类型(代码、配置、文本、网页文件)
- Git仓库扫描: 支持本地Git仓库和远程URL克隆扫描,带URL安全验证
- 自定义规则: YAML/JSON格式规则配置,支持45+内置规则
- 多种检测算法: 正则表达式、熵值分析、关键字匹配
- 图形化界面: 直观的tkinter GUI,实时显示扫描进度和结果,带颜色编码严重性
- 多格式报告: 支持 JSON、CSV、HTML、XML 格式报告输出,自动保存到
report/目录 - 编码自动检测: 支持 UTF-8、GBK、Latin-1 等主流编码
- API密钥: AWS、GitHub、GitLab、Slack、Google、Azure等 (11条)
- 数据库凭证: MySQL、PostgreSQL、MongoDB、Redis连接字符串 (7条)
- 私钥文件: RSA、SSH、PEM、PGP私钥 (4条)
- 访问令牌: JWT、OAuth、Bearer Token (3条)
- 个人信息: 身份证号、手机号、邮箱、银行卡号 (7条)
- 通用凭证: 密码、密钥、高熵字符串 (9条)
- Python 3.14+
- uv (推荐) 或 pip
# 克隆或下载项目
cd sensitive-info-scanner
# 使用 uv 安装依赖(推荐)
uv pip install -r requirements.txt
# 或使用 pip
pip install -r requirements.txt# 使用 uv 运行(推荐)
uv run main.py
# 或直接使用 Python
python main.py# 扫描指定目录
uv run main.py --target /path/to/scan
# 输出JSON格式报告
uv run main.py --target ./my-project --format json --output report/scan.json
# 使用自定义规则
uv run main.py --target ./code --rules custom_rules.yaml
# 排除特定文件和目录
uv run main.py --target ./code --exclude "*.log" --exclude-dir "node_modules"
# 查看所有内置规则
uv run main.py --list-rules用法: main.py [选项]
选项:
-h, --help 显示帮助信息
--target, -t PATH 扫描目标路径(文件或目录)
--rules, -r PATH 规则配置文件路径
--output, -o PATH 输出文件路径(默认: report/scan_report_YYYYMMDD_HHMMSS.html)
--format, -f FORMAT 输出格式: json, csv, html, xml(默认: html)
--exclude, -e PATTERN 排除模式(可多次使用)
--exclude-dir DIR 排除目录(可多次使用)
--threads N 扫描线程数(默认: 4)
--depth N 扫描深度,-1表示无限制(默认: -1)
--binary 扫描二进制文件
--no-gitignore 不遵循.gitignore文件
--cli 强制使用命令行模式
--version, -v 显示版本信息
--list-rules 列出所有内置规则
rules:
- id: "aws-access-key"
name: "AWS Access Key ID"
description: "检测AWS访问密钥ID"
pattern: "AKIA[0-9A-Z]{16}"
severity: HIGH
confidence: 90
keywords: ["AKIA", "AWS"]
file_types: [".py", ".js", ".env", "*"]
category: api_key
enabled: true
- id: "private-key"
name: "Private Key"
description: "检测私钥文件内容"
pattern: "-----BEGIN (RSA |DSA |EC |OPENSSH )?PRIVATE KEY-----"
severity: CRITICAL
confidence: 95
keywords: ["PRIVATE KEY"]
category: private_key
enabled: true| 属性 | 说明 | 必需 |
|---|---|---|
| id | 规则唯一标识 | 是 |
| name | 规则名称 | 是 |
| pattern | 正则表达式模式 | 是 |
| description | 规则描述 | 否 |
| severity | 严重性: CRITICAL/HIGH/MEDIUM/LOW/INFO | 否 |
| confidence | 置信度 (0-100) | 否 |
| keywords | 关键词列表(预过滤) | 否 |
| file_types | 适用文件类型 | 否 |
| entropy_threshold | 熵值阈值 | 否 |
| category | 规则分类 | 否 |
| enabled | 是否启用 | 否 |
| 分类 | 数量 | 说明 |
|---|---|---|
| API密钥 | 11条 | AWS、GitHub、GitLab、Slack等 |
| 数据库 | 7条 | MySQL、PostgreSQL、MongoDB等 |
| 个人信息 | 7条 | 身份证、手机号、邮箱、银行卡 |
| 凭证 | 7条 | 通用密钥、访问凭证 |
| 私钥 | 4条 | RSA、SSH、PEM、PGP |
| 令牌 | 3条 | JWT、OAuth、API Token |
| 密码 | 2条 | 硬编码密码检测 |
| 其他 | 4条 | 通用高熵字符串等 |
sensitive-info-scanner/
├── main.py # 程序入口(GUI/CLI双模式)
├── models.py # 核心数据模型(Rule、Finding、ScanConfig等)
├── core_scanner.py # 核心扫描器,整合各组件
├── requirements.txt # 依赖列表
├── README.md # 使用说明
├── CLAUDE.md # 开发指南
├── .gitignore # Git忽略配置
├── components/
│ ├── __init__.py
│ ├── scanner_engine.py # 底层扫描引擎
│ ├── file_handler.py # 文件处理器(编码检测、.gitignore支持)
│ ├── rule_engine.py # 规则引擎(YAML/JSON加载、正则编译)
│ ├── gui.py # tkinter图形界面
│ └── report_generator.py # 多格式报告生成器
├── config/
│ └── default_rules.yaml # 45条默认规则配置
├── templates/
│ └── report_template.html # HTML报告模板
└── report/ # 扫描报告输出目录(自动创建)
扫描完成后,报告自动保存到 report/ 目录(自动创建),文件名包含时间戳:
report/
├── scan_report_20260331_031942.html
├── scan_report_20260331_031942.json
├── scan_report_20260331_031942.csv
└── scan_report_20260331_031942.xml
- 专业的可视化界面,响应式设计
- 严重性分布饼图(Chart.js)
- 文件类型分布统计
- 详细结果表格(支持搜索和筛选)
- 按规则分类的修复建议
- 风险等级标识(CRITICAL/HIGH/MEDIUM/LOW/INFO)
{
"scan_id": "SCAN-20240101-120000-XXXX",
"start_time": "2024-01-01T12:00:00",
"end_time": "2024-01-01T12:01:30",
"duration_seconds": 90,
"target_path": "/path/to/scan",
"risk_level": "HIGH",
"statistics": {
"total_findings": 5,
"severity_distribution": {
"CRITICAL": 1,
"HIGH": 2,
"MEDIUM": 2
},
"file_distribution": {...}
},
"findings": [...]
}- 左侧控制面板: 目标选择、规则配置、高级选项
- 右侧结果区域: 筛选工具栏、问题列表、详情面板
- 底部状态栏: 进度条、扫描统计、耗时显示
按严重性颜色编码,确保高对比度:
| 严重性 | 背景色 | 文字色 |
|---|---|---|
| CRITICAL | 浅红 #FEE2E2 |
深红 #991B1B |
| HIGH | 浅橙 #FFF0E6 |
深橙 #9A3412 |
| MEDIUM | 浅黄 #FFFACC |
深黄 #92400E |
| LOW | 浅蓝 #E6F3FF |
深蓝 #1E40AF |
| INFO | 浅灰 #F0F0F0 |
深灰 #374151 |
- 双击结果项打开文件
- 右键菜单:复制内容、复制路径、打开文件、忽略规则/文件
- 严重性筛选和文本搜索
- 列排序(点击表头)
- 导出 CSV/JSON/HTML
| 特性 | 说明 |
|---|---|
| ReDoS防护 | 正则匹配5秒超时控制,防止恶意正则导致拒绝服务 |
| 路径遍历防护 | 符号链接验证 + 路径范围检查,防止越权访问 |
| Git注入防护 | URL协议白名单验证,防止命令注入 |
| XSS防护 | HTML报告输出全转义,防止脚本注入 |
| 内存保护 | 100MB文件大小限制,大文件分块读取 |
| 输入验证 | 规则定义完整性校验,防止无效配置 |
| 异常隔离 | 单文件扫描失败不影响整体扫描流程 |
| 退出码 | 含义 |
|---|---|
| 0 | 扫描完成,未发现风险或仅发现INFO级别问题 |
| 1 | 发现MEDIUM级别风险 |
| 2 | 发现HIGH级别风险 |
| 3 | 发现CRITICAL级别风险 |
| 130 | 扫描被用户中断 (Ctrl+C) |
退出码设计便于CI/CD集成,可根据风险级别自动阻断流水线。
- 隐私保护: 本工具用于安全审计,请确保您有权扫描目标代码
- 误报处理: 部分规则可能产生误报,建议人工复核扫描结果
- 性能优化: 大文件自动分块读取(100MB限制),避免内存溢出
- 编码支持: 自动检测文件编码,支持UTF-8、GBK、Latin-1等常见编码
- 线程安全: 扫描在后台线程执行,GUI保持响应
MIT License
欢迎提交Issue和Pull Request!