fardeenakmal/Cyber-Attack-Visualizer
GitHub: fardeenakmal/Cyber-Attack-Visualizer
一个全栈网络攻击可视化与威胁情报平台,通过聚合多源 API 帮助用户检测数据泄露并监控全球安全态势。
Stars: 0 | Forks: 0
# 🛡️ 网络攻击可视化工具
## 目录
- [概述](#overview)
- [功能](#features)
- [架构](#architecture)
- [技术栈](#tech-stack)
- [快速开始](#getting-started)
- [环境变量](#environment-variables)
- [API 参考](#api-reference)
- [前端页面](#frontend-pages)
- [身份验证](#authentication)
- [扫描引擎](#scan-engine)
- [数据库 Schema](#database-schema)
- [项目结构](#project-structure)
- [已知局限性](#known-limitations)
- [路线图](#roadmap)
## 概述
网络攻击可视化工具是一个全栈 Web 应用程序,旨在帮助个人和政府机构检查其个人标识符(例如电子邮件地址、电话号码、IP 地址、Aadhaar 号码、PAN 卡和 URL)是否在数据泄露中被暴露,或在威胁情报源中被标记。
该应用程序将 Node.js + Express + SQLite 后端与 React + Vite 前端相结合,提供动态 UI、基于角色的控制面板以及可靠的后备扫描策略。
## 功能
- **多标识符扫描** — 支持 EMAIL、PHONE、IP、AADHAAR、PAN 和 URL
- **泄露情报** — 集成 LeakCheck、AbuseIPDB、VirusTotal 和 Numverify
- **后备策略** — 当 API 不可用时,平滑降级至本地扫描历史记录
- **IP 情报补全** — 缓存具有 24 小时有效期窗口的 IP 威胁情报
- **全球威胁源** — 拉取并可视化来自 SANS ISC 的顶级威胁 IP
- **基于角色的访问权限** — 为普通用户和政府账户提供独立的控制面板
- **动态结果弹窗** — 掩码标识符、隐私指纹、风险评分和缓解措施
- **扫描历史记录** — 每位用户的历史记录持久化保存在 SQLite 中,并同步镜像到 localStorage
- **主题系统** — 通过 ThemeContext 实现全局 CSS 主题化
## 架构
```
┌─────────────────────────────────────────────────────┐
│ Frontend (React) │
│ Login │ Register │ Home Scanner │ Dashboard │ Gov │
└────────────────────────┬────────────────────────────┘
│ REST API
┌────────────────────────▼────────────────────────────┐
│ Backend (Node + Express) │
│ Auth Controller │ Scan Controller │
└────────────────────────┬────────────────────────────┘
│
┌────────────────────────▼────────────────────────────┐
│ SQLite Database │
│ users │ attacks │ threat_cache │
└─────────────────────────────────────────────────────┘
```
后端提供供 React 前端调用的 REST API。SQLite 负责处理扫描记录、威胁缓存和用户账户的持久化。前端通过 localStorage 管理会话状态,并执行路由级别的访问控制。
## 技术栈
| 层级 | 技术 |
|-----------|-------------------------------------|
| Frontend | React, Vite, React Router |
| Styling | CSS Modules, ThemeContext, index.css |
| Backend | Node.js, Express |
| Database | SQLite (通过 better-sqlite3 或类似工具) |
| Auth | SHA-256 密码哈希 (见路线图) |
| APIs | LeakCheck, AbuseIPDB, VirusTotal, Numverify, SANS ISC |
| Config | dotenv |
## 快速开始
### 前置条件
- Node.js v18+
- npm 或 yarn
### 1. 克隆仓库
```
git clone https://github.com/your-org/cyber-attack-visualizer.git
cd cyber-attack-visualizer
```
### 2. 安装后端依赖
```
cd cyber-backend
npm install
```
### 3. 安装前端依赖
```
cd ../cyber-visualizer
npm install
```
### 4. 配置环境变量
在 `cyber-backend/` 目录下创建一个 `.env` 文件(见 [环境变量](#environment-variables))。
### 5. 启动后端
```
cd cyber-backend
npm start
```
后端默认运行在 `http://localhost:5000`。
### 6. 启动前端
```
cd cyber-visualizer
npm run dev
```
前端默认运行在 `http://localhost:5173`。
## 环境变量
使用以下键创建 `cyber-backend/.env` 文件:
```
PORT=5000
# API Keys
LEAKCHECK_API_KEY=your_leakcheck_key
ABUSEIPDB_API_KEY=your_abuseipdb_key
VIRUSTOTAL_API_KEY=your_virustotal_key
NUMVERIFY_API_KEY=your_numverify_key
# 政府账户默认值(首次运行时自动创建)
GOV_ID=GOV001
GOV_PASSWORD=your_gov_password
```
所有 API 密钥均为可选 — 当密钥缺失或调用失败时,扫描引擎将降级使用本地历史记录。
## API 参考
### 身份验证
| Method | Endpoint | Description |
|--------|----------------------|---------------------------------|
| POST | `/api/auth/register` | 注册新用户账户 |
| POST | `/api/auth/login` | 登录(用户或政府模式) |
**注册请求体:**
```
{
"name": "Jane Doe",
"username": "janedoe",
"email": "jane@example.com",
"password": "securepassword"
}
```
**登录请求体(用户模式):**
```
{
"loginId": "jane@example.com",
"password": "securepassword",
"mode": "user"
}
```
**登录请求体(政府模式):**
```
{
"govId": "GOV001",
"password": "govpassword",
"mode": "government"
}
```
### 扫描与攻击
| Method | Endpoint | Description |
|--------|---------------------------|--------------------------------------|
| POST | `/api/scan` | 扫描标识符是否泄露 |
| GET | `/api/attacks` | 获取所有记录的扫描结果 |
| GET | `/api/attacks/search` | 根据查询参数搜索扫描历史 |
| DELETE | `/api/attacks/:id` | 删除特定的扫描记录 |
| GET | `/api/enrich/:ip` | 使用威胁情报补全 IP|
| GET | `/api/global-threats` | 获取全球顶级威胁 IP |
**扫描请求体:**
```
{
"identifier": "user@example.com",
"type": "EMAIL"
}
```
支持的 `type` 值:`EMAIL`、`PHONE`、`IP`、`AADHAAR`、`PAN`、`URL`
## 前端页面
| Route | Access | Description |
|-----------------|----------------|---------------------------------------------|
| `/login` | Public | 用户和政府登录 |
| `/register` | Public | 新用户注册 |
| `/home` | Authenticated | 主标识符扫描器 |
| `/dashboard` | Authenticated (non-guest) | 个人扫描历史与分析 |
| `/gov-dashboard`| Government only | 威胁情报概览 |
### 路由守卫
- `ProtectedRoute` — 要求任何已激活的会话
- `DashboardRoute` — 拦截访客/未认证用户
- `GovRoute` — 仅允许 `role = government` 的用户
## 身份验证
### 注册
1. 验证姓名、用户名、电子邮件和密码字段
2. 强制要求最小密码长度
3. 拒绝重复的电子邮件或用户名
4. 将密码存储为 SHA-256 哈希值
5. 返回创建的用户的 payload
### 登录
支持两种模式:
- **用户模式** — 通过 `电子邮件/用户名` + 密码进行身份验证
- **政府模式** — 通过 `govId` + 密码进行身份验证,并进行角色验证
如果不存在默认的政府账户,则会在后端首次启动时自动创建一个。
### 会话管理
会话通过 `userStorage.js` 辅助方法(`getSession`、`setSession`、`clearSession`)持久化存储在 `localStorage` 中。目前没有服务器端 token 系统(见[路线图](#roadmap))。
## 扫描引擎
### 支持的标识符类型和 API
| Type | Primary API | Fallback |
|---------|---------------|-------------------|
| EMAIL | LeakCheck | 本地攻击历史 |
| IP | AbuseIPDB | 本地攻击历史 |
| URL | VirusTotal | 本地攻击历史 |
| PHONE | Numverify | 本地攻击历史 |
| AADHAAR | — | 本地后备路径 |
| PAN | — | 本地后备路径 |
### 后备策略
当 API 密钥缺失或实时调用失败时,扫描控制器将:
1. 在本地 `attacks` 表中搜索与标识符和类型匹配的历史记录
2. 如果找到,则返回最近的本地结果
3. 否则,返回安全的、中性的后备响应
### 结果弹窗
每次扫描结果都会在动态弹窗中显示,包含:
- 掩码标识符显示
- 隐私指纹(基于 SHA-256 的参考哈希)
- 风险评分和暴露元数据
- 针对各种标识符类型的推荐缓解措施
### 输入限制(前端)
| Type | Max Length | Normalization |
|---------|------------|--------------------|
| PHONE | 10 个字符 | 仅限数字 |
| AADHAAR | 12 个字符 | 仅限数字 |
| PAN | 10 个字符 | 大写字母和数字 |
## 数据库 Schema
### `users`
| Column | Type | Description |
|--------------|---------|--------------------------------|
| id | INTEGER | 主键 |
| name | TEXT | 显示名称 |
| username | TEXT | 唯一用户名 |
| email | TEXT | 唯一电子邮件 |
| passwordHash | TEXT | SHA-256 哈希密码 |
| role | TEXT | `user` 或 `government` |
### `attacks`
| Column | Type | Description |
|------------|---------|--------------------------------------|
| id | INTEGER | 主键 |
| identifier | TEXT | 扫描的值 |
| type | TEXT | 标识符类型 (EMAIL, IP 等) |
| status | TEXT | 扫描结果 |
| severity | REAL | 风险评分 |
| source | TEXT | API 或后备来源 |
| metadata | TEXT | 泄露详情 (JSON) |
| scannedAt | TEXT | 时间戳 |
### `threat_cache`
| Column | Type | Description |
|-----------|---------|------------------------------------|
| ip | TEXT | 缓存的 IP 地址 |
| data | TEXT | 补全响应 (JSON) |
| cachedAt | TEXT | 缓存时间戳 (24小时 TTL) |
数据库模块包含轻量级的 schema 迁移逻辑,用于处理现有 `attacks` 表中缺失的列。
## 项目结构
```
cyber-attack-visualizer/
├── cyber-backend/
│ ├── server.js # Entry point
│ ├── config/
│ │ └── db.js # SQLite setup and migrations
│ ├── controllers/
│ │ ├── authController.js # Register and login logic
│ │ └── scanController.js # Scan engine and enrichment
│ └── models/
│ └── Attack.js # Attack record persistence
│
└── cyber-visualizer/
├── src/
│ ├── main.jsx # App bootstrap
│ ├── App.jsx # Router and route guards
│ ├── userStorage.js # Session helpers
│ ├── index.css # Global styles and theme variables
│ └── components/
│ ├── Home.jsx # Scanner page
│ ├── LoginPage.jsx # Login UI
│ ├── RegisterPage.jsx # Registration UI
│ ├── DashboardPage.jsx # User dashboard
│ └── GovDashboard.jsx # Government dashboard
└── vite.config.js
```
**代码行数统计(不包括 node_modules、dist、lockfile):**
| Area | Lines |
|--------------|-------|
| Backend | 740 |
| Frontend | 3,292 |
| **Total** | **4,032** |
## 已知局限性
- **密码安全性** — 使用了无盐的 SHA-256;不适合用于生产环境
- **无服务器端会话** — 用户会话存储在 `localStorage` 中,没有 token 过期机制
- **扫描历史仅限本地客户端** — 用户历史记录绑定于浏览器,无法跨设备同步
- **政府控制面板** — 目前侧重于展示,实时数据集成有限
- **无测试套件** — 目前没有将自动化后端或前端测试接入 package 脚本
- **路由组织** — 存在 `scanRoutes.js`,但路由直接挂载在 `server.js` 中
## 路线图
计划进行以下改进,以推动项目达到生产就绪状态:
1. **使用 bcrypt 或 argon2 替换 SHA-256**,实现加盐的安全密码哈希
2. **实现 JWT 或安全 cookie 会话**,以取代基于 localStorage 的身份验证
3. **将扫描历史迁移至后端**,通过基于用户的 endpoint 实现跨设备同步
4. **添加分页和过滤器**,用于攻击列表和搜索结果
5. **编写集成测试**,针对身份验证、扫描后备和补全 endpoint
6. **整合旧版的 userStorage 辅助方法**,这些方法目前不再在活动的身份验证流程中使用
7. **挂载 `scanRoutes.js`**,以便在 `server.js` 中实现更清晰的路由组织
## 教育免责声明
本项目**仅出于教育目的**构建。旨在演示全栈 Web 开发概念,包括 REST API 设计、身份验证流程、第三方 API 集成和基于角色的访问控制。如果不进行重大的安全加固,则不打算用于生产环境(见[路线图](#roadmap))。
## 作者
**Fardeen Akmal**
作为学习项目构建,旨在探索网络情报工具、全栈架构和泄露检测工作流。
*最后更新:2026 年 4 月*
标签:GitHub, GNU通用公共许可证, MITM代理, Node.js, React, Syscalls, 威胁情报, 安全可视化, 开发者工具, 数据泄露查询, 自定义脚本