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, 威胁情报, 安全可视化, 开发者工具, 数据泄露查询, 自定义脚本