Skip to content

Tingze/CodeScan

Repository files navigation

CodeScan

一款功能强大的白盒敏感信息扫描工具,支持自定义配置规则,具有图形化界面,可扫描各种类型代码仓、配置文件、文本等,检测密钥以及个人隐私数据。

功能特性

核心功能

  • 多文件类型支持: 支持 100+ 种文件类型(代码、配置、文本、网页文件)
  • Git仓库扫描: 支持本地Git仓库和远程URL克隆扫描,带URL安全验证
  • 自定义规则: YAML/JSON格式规则配置,支持45+内置规则
  • 多种检测算法: 正则表达式、熵值分析、关键字匹配
  • 图形化界面: 直观的tkinter GUI,实时显示扫描进度和结果,带颜色编码严重性
  • 多格式报告: 支持 JSON、CSV、HTML、XML 格式报告输出,自动保存到 report/ 目录
  • 编码自动检测: 支持 UTF-8、GBK、Latin-1 等主流编码

检测能力(45条规则)

  • 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

GUI模式

# 使用 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          列出所有内置规则

规则配置

规则文件格式 (YAML)

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 是否启用

内置规则分类(45条)

分类 数量 说明
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

HTML报告特性

  • 专业的可视化界面,响应式设计
  • 严重性分布饼图(Chart.js)
  • 文件类型分布统计
  • 详细结果表格(支持搜索和筛选)
  • 按规则分类的修复建议
  • 风险等级标识(CRITICAL/HIGH/MEDIUM/LOW/INFO)

JSON报告

{
  "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": [...]
}

GUI界面特性

主界面布局

  • 左侧控制面板: 目标选择、规则配置、高级选项
  • 右侧结果区域: 筛选工具栏、问题列表、详情面板
  • 底部状态栏: 进度条、扫描统计、耗时显示

问题列表样式

按严重性颜色编码,确保高对比度:

严重性 背景色 文字色
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集成,可根据风险级别自动阻断流水线。

注意事项

  1. 隐私保护: 本工具用于安全审计,请确保您有权扫描目标代码
  2. 误报处理: 部分规则可能产生误报,建议人工复核扫描结果
  3. 性能优化: 大文件自动分块读取(100MB限制),避免内存溢出
  4. 编码支持: 自动检测文件编码,支持UTF-8、GBK、Latin-1等常见编码
  5. 线程安全: 扫描在后台线程执行,GUI保持响应

许可证

MIT License

贡献

欢迎提交Issue和Pull Request!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors