PraveenChigurla/Phishing_Website_Detector

GitHub: PraveenChigurla/Phishing_Website_Detector

一个结合自定义启发式引擎与多家外部威胁情报API的全栈钓鱼URL检测系统,提供Web界面、Chrome扩展和CLI扫描器以实时识别并拦截钓鱼网站。

Stars: 0 | Forks: 0

# 🛡️ 钓鱼网站检测器 一个基于 **Django**、**Next.js (TSX)** 和 **PostgreSQL** 构建的现代全栈钓鱼 URL 检测系统。它将加权启发式评分引擎与来自四家安全供应商 API 的实时威胁情报相结合,能准确地将 URL 分类为 **安全 (SAFE)**、**可疑 (SUSPICIOUS)** 或 **钓鱼 (PHISHING)** —— 同时将误报率降至最低。 ## ✨ 核心功能 - **多层检测** — 15+ 种启发式信号(词法、WHOIS、SSL、JavaScript、HTML 内容分析)与外部供应商共识相结合。 - **供应商共识优先** — 外部 API 判定可覆盖嘈杂的启发式信号。像 `checkphish.bolster.ai` 这样的 URL 不会仅仅因为包含“phish”一词就被标记。 - **4 个外部安全 API** — Google Safe Browsing、VirusTotal、IPQualityScore 和 URLScan.io。 - **白名单 / 黑名单策略** — 由管理员管理的域名覆盖,用于即时判定。 - **扫描历史记录** — 每次扫描都会保存完整的证据,以供审计和审查。 - **Chrome 扩展程序** — 在风险网站加载前,通过警告页面实时拦截钓鱼网站。 - **CLI 扫描器** — 通过 `node index.js` 进行快速的基于终端的 URL 扫描。 - **玻璃拟态 UI** — 简洁现代的 Next.js 前端,具备实时评分、投票明细和微动画效果。 ## 🛠️ 技术栈 | 层级 | 技术 | 详情 | |---|---|---| | **后端** | Django 6.0 + Django REST Framework | REST API、评分引擎、数据库模型 | | **前端** | Next.js 14 (App Router, TypeScript/TSX) | 结合 TailwindCSS 的玻璃拟态 UI | | **数据库** | PostgreSQL (主要) / SQLite (备选) | 如果未安装 `psycopg2` 则自动回退 | | **CLI** | Node.js (ES Modules) | 交互式终端扫描器 | | **扩展程序** | Chrome 扩展程序 (Manifest V3) | 后台 service worker + 警告页面 | ## 📦 项目结构 ``` Phishing_Website_Detector/ │ ├── backend/ # Django backend │ ├── phishing_backend/ # Django project settings │ │ ├── settings.py # DB config, CORS, installed apps │ │ ├── urls.py # Root URL routing → /api/ │ │ └── wsgi.py # WSGI entry point │ ├── analyzer/ # Core analysis app │ │ ├── models.py # ScanHistory, DomainPolicy models │ │ ├── views.py # API views (AnalyzeURL, History, Policy) │ │ ├── services.py # Heuristic engine + vendor integrations │ │ ├── serializers.py # DRF serializers │ │ └── urls.py # /api/analyze, /api/history, /api/policy │ ├── run.py # Django management script (renamed from manage.py) │ └── .env # ⚠️ Environment variables (NOT committed) │ ├── frontend/ # Next.js frontend │ ├── src/ │ │ ├── app/ # App Router │ │ │ ├── layout.tsx # Root layout │ │ │ ├── page.tsx # Main scanner page │ │ │ └── globals.css # Global styles │ │ └── components/ # Reusable UI components │ │ ├── ScannerInput.tsx # URL input form │ │ ├── VerdictCard.tsx # Score + verdict display │ │ ├── HeuristicsTab.tsx # Detailed heuristic breakdown │ │ ├── ApiFeedsTab.tsx # External API results tab │ │ ├── PolicyManager.tsx # Whitelist/Blacklist manager │ │ └── ScanHistoryLog.tsx # Scan history viewer │ ├── package.json │ └── next.config.js │ ├── extension/ # Chrome Extension (Manifest V3) │ ├── manifest.json # Extension config │ ├── background.js # Service worker — intercepts navigation │ ├── warning.html # Phishing warning interstitial page │ └── icon.png # Extension icon │ ├── index.js # CLI scanner (Node.js) ├── package.json # Root package.json for CLI ├── .gitignore └── README.md ``` ## 🔑 必需的 API 密钥 本项目集成了 **4 个外部安全 API**。您需要从每个提供商获取免费的 API 密钥: | # | 服务 | 用途 | 获取您的密钥 | |---|---------|---------|--------------| | 1 | **Google Safe Browsing** | 根据谷歌的威胁数据库检查 URL | [Google Cloud Console](https://console.cloud.google.com/apis/library/safebrowsing.googleapis.com) | | 2 | **VirusTotal** | 汇总某个 URL 的 70+ 种防病毒引擎结果 | [VirusTotal API](https://www.virustotal.com/gui/join-us) | | 3 | **IPQualityScore** | 返回风险评分、钓鱼/恶意软件/可疑标志 | [IPQS Dashboard](https://www.ipqualityscore.com/create-account) | | 4 | **URLScan.io** | 提交 URL 以进行深度扫描和截图 | [URLScan API](https://urlscan.io/user/signup) | ## ⚙️ 环境变量 在 **`backend/.env`** 创建一个包含以下变量的文件: ``` # Django 配置 DEBUG=True SECRET_KEY=your-secret-key-change-in-production # Database 配置(将 DB_PASSWORD 留空以回退到 SQLite) DB_NAME=phishing_db DB_USER=postgres DB_PASSWORD= DB_HOST=127.0.0.1 DB_PORT=5432 # 外部 Service API 密钥(必需) GOOGLE_SAFE_BROWSING_API_KEY=your_google_api_key_here VIRUSTOTAL_API_KEY=your_virustotal_api_key_here IPQUALITYSCORE_API_KEY=your_ipqs_api_key_here URLSCAN_API_KEY=your_urlscan_api_key_here ``` ## 🚀 快速开始 ### 前置条件 - **Python 3.11+** (包含 `pip`) - **Node.js 20+** (包含 `npm`) - **PostgreSQL** (可选 — SQLite 开箱即用) - **Git** ### 1. 克隆仓库 ``` git clone https://github.com/PraveenChigurla/Phishing_Website_Detector.git cd Phishing_Website_Detector ``` ### 2. 后端设置 ``` # 创建并激活虚拟环境 python -m venv venv # Windows .\venv\Scripts\Activate.ps1 # macOS/Linux source venv/bin/activate # 安装 Python 依赖 pip install -r backend/requirements.txt # 创建环境文件 cp backend/.env.example backend/.env # ✏️ 编辑 backend/.env 并添加你的 API 密钥 # 运行数据库 migrations python backend/run.py migrate # 启动 Django 开发服务器 python backend/run.py runserver 8000 ``` API 现已在 **`http://127.0.0.1:8000/api/`** 上线运行 ### 3. 前端设置 ``` cd frontend npm install npm run dev ``` UI 现已在 **`http://localhost:3000`** 上线运行 ### 4. CLI 扫描器 (可选) ``` # 从项目根目录 npm install node index.js ``` ### 5. Chrome 扩展程序 (可选) 1. 在 Chrome 中打开 `chrome://extensions/`。 2. 启用 **开发者模式** (右上角开关)。 3. 点击 **加载已解压的扩展程序** → 选择 `extension/` 文件夹。 4. 扩展程序图标将出现在您的工具栏中 — 它会自动扫描您访问的每一个 URL。 ## 📡 API 端点 所有端点均带有 `/api/` 前缀。 | 方法 | 端点 | 描述 | 请求体 | |--------|----------|-------------|------| | `POST` | `/api/analyze` | 扫描 URL 并返回判定结果 | `{ "url": "https://example.com" }` | | `GET` | `/api/history` | 列出所有历史扫描记录 (分页) | — | | `GET` | `/api/policy` | 列出白名单/黑名单规则 | — | | `POST` | `/api/policy` | 添加白名单/黑名单规则 | `{ "domain": "example.com", "policy": "whitelist", "reason": "..." }` | | `POST` | `/api/urlscan` | 代理扫描至 URLScan.io | `{ "url": "https://example.com" }` | | `GET` | `/api/ipquality?url=...` | 代理扫描至 IPQualityScore | 查询参数: `url` | ### 响应示例 (`POST /api/analyze`) ``` { "Verdict": "SAFE", "Final Score": 6.0, "HeuristicReasons": [], "Votes": { "phishing": 0, "suspicious": 0, "legit": 4, "uncertain": 0 }, "GoogleSafeBrowsing": { "status": "legit", "message": "No threats found." }, "VirusTotal": { "status": "legit", "message": "Only 0 malicious detections out of 93." }, "IPQualityScore": { "status": "legit", "message": "Risk score: 0" }, "Lexical": [ 3.0, { "url_length": 28, "has_ip": false, "..." : "..." } ], "WHOIS": [ 1, { "domain_age_days": 3650, "whois_success": true } ], "SSL": [ 1, { "ssl_status": "Valid" } ] } ``` ## 🧠 评分引擎工作原理 ### 启发式信号 (15+ 种特征) | 类别 | 检查的信号 | |----------|-----------------| | **词法** | URL 长度、URL 中的 IP 地址、`@` 符号、十六进制编码、非标准端口、子域名数量、URL 熵、路径深度 | | **关键词** | URL 中与钓鱼相关的词汇 *(弱信号,仅扣 0.5 分)* | | **WHOIS** | 域名年龄、注册商信息、RDAP 回退 | | **SSL** | 证书有效性 (有效 / 无效 / 仅限 HTTP) | | **JavaScript** | 可疑脚本 (键盘记录器、混淆的 eval、凭据外泄) | | **HTML** | 带有外部表单操作的密码字段、隐藏的 iframe、外部 favicon | | **免费托管** | 检测免费平台 (vercel.app, netlify.app, github.io 等) | ### 判定决策规则 ``` Rule 1: If ALL external APIs say "legit" → SAFE (vendor consensus wins) Rule 2: If 2+ APIs say "legit" & none say phishing → SAFE Rule 3: If Google Safe Browsing flags phishing → PHISHING (authoritative) Rule 4: If 2+ sources say phishing → PHISHING Rule 5: If 1 phishing vote or 2+ suspicious → SUSPICIOUS Rule 6: Heuristic suspicious + all APIs uncertain → SUSPICIOUS Else: → SAFE ``` ### 评分范围 | 分数 | 判定结果 | |-------|---------| | 0.0 – 3.5 | 🔴 **钓鱼 (PHISHING)** | | 3.6 – 5.5 | 🟡 **可疑 (SUSPICIOUS)** | | 5.6 – 10.0 | 🟢 **安全 (SAFE)** | ## 🧪 测试 ### 测试 URL | URL | 预期判定 | 原因 | |-----|------------------|-----| | `https://www.facebook.com` | ✅ 安全 (SAFE) | 知名域名,所有 API 均确认 | | `https://checkphish.bolster.ai` | ✅ 安全 (SAFE) | 合法的安全公司,供应商共识覆盖了关键词判定 | | `https://phishing-website-flax.vercel.app` | ⚠️ 可疑 (SUSPICIOUS) | 免费托管 + 可疑关键词 + IPQS 对其进行了标记 | ### 运行测试 ``` python backend/run.py test ``` ## 📄 许可证 MIT License — 可免费使用、修改和分发。 ## 👤 作者 **Praveen Chigurla** — [GitHub](https://github.com/PraveenChigurla)
标签:Django, MITM代理, 后端开发, 威胁情报, 开发者工具, 测试用例, 逆向工具, 钓鱼检测