isaac0621/SecuScan
GitHub: isaac0621/SecuScan
一个全栈安全仪表板,整合日志解析、入侵检测与 JWT 认证,模拟真实 SOC 场景。
Stars: 0 | Forks: 0
# 🔒 SecuScan 仪表板 - 安全日志可视化与分析
一个全栈安全仪表板,通过日志分析、入侵检测和安全 API 设计展示网络安全专业知识。使用 React、Vite、Python Flask 和 JWT 认证构建。
## 📋 项目概述
SecuScan 通过以下方式模拟真实的安全运营中心 (SOC) 仪表板:
- **解析服务器安全日志**并检测入侵模式
- **使用交互式图表可视化威胁**(失败登录尝试、按国家/地区划分的流量、告警严重性)
- **实现 JWT 认证**以保护敏感端点
- **检测攻击模式**:SQL 注入、暴力破解、路径遍历、DDoS 指标
- **提供实时分析**,支持自动数据刷新
## 🚀 快速开始
### 安装
```
# 导航到项目根目录
cd SecuScan
# 安装所有依赖
npm run install-all
```
### 使用一条命令运行所有服务
```
npm start
```
此命令使用 **concurrently** 同时运行:
- **后端**:Flask 服务器,地址 `http://localhost:5000`
- **前端**:Vite 开发服务器,地址 `http://localhost:5173`
### 演示凭据
```
Username: admin
Password: admin123
```
## 📁 项目结构
```
SecuScan/
├── client/ # React + Vite Frontend
│ ├── src/
│ │ ├── components/
│ │ │ ├── Dashboard.jsx # Main dashboard with charts
│ │ │ └── Dashboard.css
│ │ ├── App.jsx # Login & theme management
│ │ ├── App.css
│ │ ├── main.jsx
│ │ └── index.css
│ ├── vite.config.js # Vite configuration with proxy
│ ├── index.html
│ └── package.json
│
├── server/ # Python Flask Backend
│ ├── main.py # Flask API with JWT auth
│ ├── security.log # Sample security logs
│ └── requirements.txt
│
├── package.json # Root monorepo config with concurrently
└── README.md
```
## 🔐 安全特性
### 认证与授权
#### JWT 令牌实现
```
# 令牌生成(安全)
token = jwt.encode(
{
'user': username,
'exp': datetime.utcnow() + timedelta(hours=24)
},
SECRET_KEY,
algorithm='HS256'
)
# 受保护端点上的令牌验证
@token_required
def get_logs(current_user):
# Only authenticated users can access
return jsonify({'logs': SECURITY_LOGS})
```
**安全优势:**
- ✅ 无状态认证(无需会话存储)
- ✅ 令牌过期(24 小时有效期)
- ✅ HS256 签名算法保证完整性
- ✅ 授权头验证
### 输入验证与清理
```
# 凭据验证
if not data or not data.get('username') or not data.get('password'):
return jsonify({'error': 'Missing credentials'}), 400
username = data['username'].strip() # Remove whitespace
```
**防护范围:**
- ✅ 缺失/空字段
- ✅ 空白符注入
### 请求大小限制
```
@app.before_request
def limit_request_size():
"""Prevent DoS attacks via large payloads"""
if request.content_length and request.content_length > 1024 * 1024:
return jsonify({'error': 'Request payload too large'}), 413
```
**防护范围:**
- ✅ 拒绝服务 (DoS) 攻击
- ✅ 缓冲区溢出尝试
- ✅ 内存耗尽
### CORS 安全
```
CORS(app) # Configured with Flask-CORS
```
**实现:**
- ✅ 允许前端与后端通信
- ✅ 防止未授权的跨域请求
- ✅ 生产环境中可限制为特定来源
### 基于模式的攻击检测
后端检测多种攻击向量:
#### SQL 注入检测
```
sql_injection_pattern = r'(union|select|drop|insert|update|delete|--|;|OR|AND).*=.*'
```
检测:UNION 注入、DROP TABLE、基于注释的注入
#### 路径遍历检测
```
path_traversal_pattern = r'(\.\./|\.\.\\|%2e%2e)'
```
检测:`../../etc/passwd`、`..\...\windows\system32`
#### 暴力破解检测
```
# 按 IP 统计登录失败次数
if count >= 10: # 10+ failures = suspicious
analysis['suspicious_ips'].append({'ip': ip, 'failed_attempts': count})
```
#### 漏洞扫描器检测
```
suspicious_agents = ['sqlmap', 'nikto', 'nmap', 'masscan']
```
## 🎨 前端特性
### 暗色模式(黑客美学)
- 在深色与浅色主题间切换
- 跨会话持久化
- 渐变背景与霓虹色彩
- 优化长时间观看体验
### 交互式仪表板
#### 1. 实时统计
- 已处理的总请求数
- 关键告警(带脉冲动画)
- 失败登录尝试
- 检测到的唯一 IP 数
#### 2. 安全图表
- **失败登录时间线**:折线图,显示随时间变化的暴力破解攻击
- **按国家/地区划分的流量**:条形图,用于地理威胁分析
- **告警严重性分布**:饼图(严重、高、中、低)
#### 3. 安全事件日志
- 包含 50+ 条示例日志的实时事件表格
- 颜色编码的严重性级别
- IP、时间戳、事件类型和状态列
- 每 10 秒自动刷新
### 响应式设计
- 移动优先方法
- 适用于桌面、平板和手机
- 从 320px 到 4K 显示器均能完美缩放
## 🔧 后端 API 端点
### 认证
#### `POST /api/auth/login`
验证用户并接收 JWT 令牌。
**请求:**
```
{
"username": "admin",
"password": "admin123"
}
```
**响应:**
```
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
```
### 需要 JWT 令牌的受保护端点
#### `GET /api/logs`
检索所有解析的安全日志。
**请求头:**
```
Authorization: Bearer {token}
```
**响应:**
```
{
"logs": [
{
"timestamp": "2024-01-19 08:15:23",
"ip": "192.168.1.105",
"event_type": "Failed Login",
"status": "failed",
"details": "Invalid password attempt",
"severity": "high"
}
]
}
```
#### `GET /api/analysis`
获取入侵检测分析和威胁情报。
**请求头:**
```
Authorization: Bearer {token}
```
**响应:**
```
{
"total_requests": 50,
"critical_alerts": 2,
"high_alerts": 8,
"medium_alerts": 5,
"low_alerts": 10,
"failed_logins_count": 12,
"unique_ips": 15,
"failed_logins": [
{"time": "2024-01-19 08", "count": 12}
],
"traffic_by_country": [
{"country": "USA", "requests": 25},
{"country": "China", "requests": 12}
],
"suspicious_ips": [
{"ip": "192.168.1.105", "failed_attempts": 12}
]
}
```
#### `GET /api/user`
获取当前认证用户的信息。
### 公共端点
#### `GET /api/health`
健康检查端点(无需认证)。
**响应:**
```
{
"status": "OK",
"service": "SecuScan Backend"
}
```
## 📊 示例日志格式
安全日志从 `server/security.log` 解析:
```
timestamp|ip_address|event_type|status|details
2024-01-19 08:15:23|192.168.1.105|Failed Login|failed|Invalid password attempt
2024-01-19 09:10:15|203.45.123.89|SQL Injection Attempt|blocked|union select from users...
```
## 🛠️ 开发
### 技术栈
**前端:**
- React 18.2 - UI 库
- Vite 5.0 - 构建工具(即时 HMR)
- Recharts 2.10 - 数据可视化
- Axios 1.6 - HTTP 客户端
- CSS3 - 使用渐变和动画的样式
**后端:**
- Flask 3.0 - Web 框架
- PyJWT 2.8 - JWT 认证
- Flask-CORS 4.0 - CORS 处理
- Python 3.8+ - 运行时
### 环境变量
在 `server/` 中创建 `.env` 文件(可选):
```
SECRET_KEY=your-super-secret-key-change-this
FLASK_ENV=production
FLASK_DEBUG=False
```
### 添加新功能
1. **新 API 端点:**
@app.route('/api/new-endpoint', methods=['GET'])
@token_required
def new_endpoint(current_user):
return jsonify({'data': 'value'}), 200
2. **新检测模式:**
new_pattern = r'your-regex-pattern'
# 添加到 _calculate_severity() 方法
3. **新图表:**
// 在 Dashboard.jsx 中
{/* 添加 Recharts 组件 */}
## 🔒 实施的安全最佳实践
| 实践 | 实现方式 | 优势 |
|----------|-----------------|---------|
| **认证** | 带过期时间的 JWT 令牌 | 防止未授权访问 |
| **密码哈希** | 服务器端验证凭据 | 防止凭据盗窃 |
| **HTTPS 就绪** | 生产环境中可添加 SSL/TLS | 加密传输中的数据 |
| **CORS** | 配置 Flask-CORS | 防止跨域攻击 |
| **输入验证** | 清理所有用户输入 | 防止注入攻击 |
| **请求限制** | 最大 1MB 有效载荷 | 防止 DoS 攻击 |
| **错误处理** | 通用错误消息 | 防止信息泄露 |
| **速率限制** | 准备集成 | 防止暴力破解攻击 |
| **模式检测** | 基于正则表达式的威胁分析 | 检测已知攻击模式 |
## 📈 为什么这个项目在简历中脱颖而出
### 展示网络安全知识
✅ 实现了 JWT 认证(不仅仅是基础认证)
✅ 检测真实攻击模式(SQL 注入、路径遍历)
✅ 理解入侵检测方法学
✅ 熟悉安全日志记录最佳实践
### 展示全栈开发能力
✅ 前端:React 与现代工具链(Vite)
✅ 后端:Python(网络安全领域的王者)
✅ DevOps:单 npm start 启动的单体仓库
✅ 数据库:日志解析与分析
### 证明代码质量
✅ 完善的安全功能文档
✅ 清晰、模块化的代码结构
✅ 完善的错误处理和验证
✅ RESTful API 设计
### 面试谈资
- “我带有 24 小时过期时间的 JWT 认证”
- “分析器检测多种攻击模式,包括 SQL 注入和路径遍历”
- “设置了一个单体仓库架构,使用 concurrent 运行多个进程”
- “构建了一个使用 Recharts 的安全指标数据可视化仪表板”
- “实现了请求大小限制以防止 DoS 攻击”
## 🚢 部署
### 生产环境检查清单
```
# 1. 更新密钥
export SECRET_KEY=generate-strong-random-key
# 2. 禁用调试模式(已设为 False)
# 3. 使用生产环境 CORS 设置
CORS(app, origins=['https://yourdomain.com'])
# 4. 添加 SSL/TLS 证书
# 在 Web 服务器(Nginx、Apache)中配置
# 5. 设置环境变量
export FLASK_ENV=production
export DEBUG=False
# 6. 使用生产环境服务器(Gunicorn)
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 main:app
# 7. 使用 npm 生产构建
npm run build
# 8. 通过 Web 服务器提供服务
# 配置 Nginx 以提供静态文件并代理 API
```
### Docker 部署(可选)
```
# 后端 Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "main:app"]
# 前端构建为静态文件并通过 Nginx 提供服务
```
## 📝 许可证
本项目作为个人作品集和简历的教育资源提供。
## 🤝 贡献
这是一个个人作品集项目。欢迎扩展:
- 真实的 GeoIP 数据库集成
- 数据库存储(PostgreSQL、MongoDB)
- 实时 WebSocket 更新
- 机器学习威胁检测
- 用户角色与 RBAC
- 双因素认证 (2FA)
- 审计日志
## 📧 问题?
关于安全功能的实现细节,请参考以下文件中的注释:
- `server/main.py` - 安全中间件和端点保护
- `server/main.py` - 威胁模式检测逻辑
- `client/src/App.jsx` - JWT 令牌处理
**用心构建,展示网络安全专业知识**
新图表标题
标签:DDoS检测, Flask后端, JWT认证, Python安全开发, React前端, SOC安全运营中心, SQL注入检测, Vite构建, 主题切换, 交互式图表, 免杀技术, 全栈安全仪表盘, 前端登录管理, 告警严重级别, 威胁可视化, 安全日志分析, 安全日志解析, 实时数据分析, 并发开发工具, 敏感接口保护, 暴力破解检测, 流量地理分析, 登录安全, 路径遍历检测, 逆向工具