drishtisharma14052007-eng/QRShield
GitHub: drishtisharma14052007-eng/QRShield
QRShield 是一套基于 Flask 的二维码与 URL 欺诈检测系统,通过多策略解码、重定向追踪和启发式规则自动识别钓鱼链接、恶意重定向和品牌冒充行为。
Stars: 0 | Forks: 0
# 🛡️ QRShield
### 智能二维码欺诈检测与风险分析系统
[](https://python.org)
[](https://flask.palletsprojects.com)
[](https://opencv.org)
[](https://sqlite.org)
[](LICENSE)
**QRShield** 解码二维码,追踪其重定向链,并运行多层欺诈检测 pipeline,从而在单次扫描中标记钓鱼链接、恶意重定向和品牌冒充行为。
[功能](#-key-features) · [工作原理](#-how-it-works) · [技术栈](#-technology-stack)
## 🎯 问题陈述
二维码在设计上是不透明的——用户在扫描之前无法看到目标 URL。攻击者利用这种盲目的信任,将钓鱼链接、恶意软件和凭证收集页面嵌入到菜单、海报、停车计费器和电子邮件的二维码中。大多数链接扫描器需要用户手动复制和粘贴 URL;**QRShield 自动完成了从图像上传到风险判定整个链路的自动化。**
## ✨ 核心功能
- **双重输入模式** — 上传二维码图像*或*直接粘贴 URL 进行分析。
- **多策略二维码解码** — 结合带自适应阈值的 OpenCV 检测器和 pyzbar 回退机制,即使图像质量较低也能实现高解码率。
- **重定向链追踪** — 手动追踪最多 10 个 HTTP/HTTPS 跳转,以暴露真实的最终目标并捕获域名切换攻击。
- **12+ 项独立欺诈检测** — 包括 HTTPS 强制验证、基于 IP 的 URL、URL 缩短服务、可疑 TLD、混淆 URL、钓鱼关键词,以及跨主流平台(Google、PayPal、Amazon、Microsoft 等)的品牌冒充检测。
- **域名年龄情报** — 原始 socket WHOIS 查询(RFC 3912)可标记新注册域名,这是一个强烈的钓鱼信号,且无需任何外部依赖。
- **0–100 风险评分** — 具有严重程度乘数的加权计分模型,映射到五个清晰的风险级别,并附带通俗易懂的建议措施。
- **扫描历史与报告** — 每次扫描及其完整发现和重定向链都会被持久化保存,可通过永久报告 URL 进行搜索和查看。
- **安全优先设计** — 服务器端上传验证,解码后立即删除文件,参数化 SQL,且不保留超出报告所需的任何数据。
## 📸 截图
| 仪表板 | 风险结果 | 扫描历史 |
|---|---|
|  |  |  |
## ⚙️ 工作原理
1. **输入** — 用户上传二维码图像或直接粘贴 URL。这两种路径都将数据输入到同一个分析 pipeline 中。
2. **解码与分类** — 解码二维码并使用模式匹配对其内容进行分类(URL、电子邮件、电话、支付链接等)。
3. **追踪重定向** — 如果内容是 URL,QRShield 会手动追踪每一个重定向跳转,记录每个中间目标,以揭示链接实际指向的位置。
4. **运行欺诈检测** — 最终 URL 将经过一系列独立的检测规则,涵盖结构性危险信号(HTTPS、基于 IP 的主机、缩短服务)、内容危险信号(钓鱼关键词、品牌冒充)以及信誉信号(通过 WHOIS 获取域名年龄)。
5. **评分与判定** — 每个触发的发现都会累加风险分数;总分将汇总为 0–100 的评分,并映射到五个风险级别之一,每个级别都附带通俗易懂的建议措施。
6. **报告** — 扫描结果将被持久化保存,并呈现为交互式风险仪表盘、带有颜色标记的发现卡片,以及可视化的重定向链时间线,同时提供永久的可共享报告链接。
## 🏗️ 架构图
```
┌──────────────────────────────────────────────────────┐
│ Browser (Client) │
│ Dark-theme UI · SVG Gauge · Vanilla JS · CSS │
└─────────────────────┬────────────────────────────────┘
│ HTTP (multipart/form-data · JSON)
┌─────────────────────▼────────────────────────────────┐
│ Flask Application │
│ app.py · routes/api.py (Blueprint /api/*) │
└──┬──────────────┬──────────────────┬─────────────────┘
│ │ │
▼ ▼ ▼
services/ services/ services/
qr_decoder redirect_checker fraud_detector
│ │ ↕ ↕ ↕ ↕
│ │ domain_age risk_scorer
│ │
└──────────────┴──────────────────────────────────────
│
models/database.py
│
database.db (SQLite)
```
模块化的服务层确保了各项职责相互独立——二维码解码、重定向追踪、欺诈检测和风险评分都作为独立且可测试的单元运行。
## 🛠️ 技术栈
| 层级 | 技术 |
|---|---|
| **语言** | Python 3.11+ |
| **Web 框架** | Flask 3.0+ |
| **二维码解码** | OpenCV(带 pyzbar 回退) |
| **图像处理** | Pillow, NumPy |
| **HTTP / 网络** | requests, 原始 socket WHOIS (RFC 3912) |
| **数据库** | SQLite(零配置,基于文件) |
| **前端** | HTML5, CSS3, 原生 JavaScript |
## 🔮 未来增强计划
- 集成 **VirusTotal API** 以进行第三方信誉评分
- 使用针对已知品牌域名的编辑距离比较进行**域名抢注(Typosquatting)检测**
- **Punycode / IDN 解码**,以捕获同形异义词(外观相似字符)攻击
- 用于批量二维码分析的**批量扫描 endpoint**
- 扫描历史的 **CSV/JSON 导出**
- 用于多用户部署的**速率限制与身份验证**
## 👤 作者
本项目作为一个网络安全作品集项目构建,展示了:
- Flask 中的模块化后端架构和清晰的服务设计
- 钓鱼检测和威胁建模概念的实际应用
- 协议级网络编程(基于 TCP 的原始 WHOIS)
- 从原始输入到可操作安全判定的端到端思维
**QRShield** — 因为您不必盲目信任一个二维码。
标签:Flask, Python, QR码识别, 威胁情报, 安全, 开发者工具, 搜索语句(dork), 数据可视化, 无后门, 欺诈检测, 超时处理, 逆向工具, 钓鱼检测