eshaansaini2004/phish-shield-ext
GitHub: eshaansaini2004/phish-shield-ext
一款基于 Chrome 扩展的实时钓鱼链接检测工具,结合启发式规则与浏览器端机器学习模型。
Stars: 0 | Forks: 0
# PhishShield
一个实时分析链接并在点击恶意内容前发出警告的 Chrome 扩展。为所有用户设计,尤其适合那些并非互联网原住民的人群。
悬停在任意链接上即可获得即时绿色、黄色或红色徽章。完全可通过设置页面进行配置,以便调整启用的检测层或将可信域名加入白名单。
## 功能
**每次悬停链接时都会运行四层分析:**
### 第一层 — URL 启发式检测(即时,无需联网)
在加载任何内容前先检查 URL 本身:
- 基于 IP 的 URL(`http://192.168.1.1/login`)
- 子域名中的品牌冒充(`paypal.com.evil.com`)
- 品牌拼写错误(`paypa1.com`、`g00gle.com`)
- Unicode 相似字符(е 与 e、а 与 a)
- 可疑关键词(`/verify-account`、`/confirm-password`)
- URL 缩短服务(bit.ly、tinyurl 等)
- 可疑 TLD(`.tk`、`.ml`、`.cf`、`.gq`)
- 重复扩展名(`invoice.pdf.exe`)
- 重定向链(`?url=`、`?goto=`)
- 以及其他(总计 14 项检查)
### 第二层 — 机器学习分类器(即时,无需联网)
一个神经网络(MLP:18 输入 → 32 → 16 → 1)在浏览器中完全运行,不与服务器往返。它提取 18 个 URL 特征(熵、子域名深度、数字密度、TLD 风险等),并返回钓鱼概率分数。该分数与启发式得分融合(45% 启发式 + 55% 机器学习),使两层相互增强。若 ML 置信度达到 60% 或更高,会在弹出窗口中明确标记。
模型使用 scikit-learn 训练,并导出为紧凑的 JSON 权重文件(约 24 KB)。要重新训练:`cd train_model && python train.py`
### 第三层 — 页面分析(在页面加载后运行)
检查当前页面是否存在钓鱼迹象:
- HTTP 页面中的密码输入框
- 提交到其他域名的表单
- 加载外部内容的隐藏 iframe
- 伪造的病毒/系统警告弹窗
- 页面标题中的品牌名称与实际域名不匹配
- 禁用了右键(常见于钓鱼页面)
- Meta 刷新重定向
### 第四层 — 下载拦截
在危险文件运行前拦截:
- 高风险文件类型(`.exe`、`.bat`、`.ps1`、`.vbs` 等)
- MIME 类型不匹配(文件声称是 PDF,实际是 .exe)
- 重复扩展名(`document.pdf.exe`)
- 非用户点击触发的自动下载
- 通用钓鱼文件名(`invoice.exe`、`update.exe`)
### 威胁情报 API(需要配置)
配置后,扩展还会检查:
- **Google Safe Browsing** — Google 的已知恶意 URL 数据库
- **PhishTank** — 众包的钓鱼 URL 数据库
- **域名年龄** — 标记新注册的域名(常见于钓鱼活动)
请参阅 [SETUP.md](./SETUP.md) 了解如何启用这些功能。
### 设置页面
右键点击扩展图标 → **选项**,即可:
- 开启或关闭任意分析层(URL 启发式、机器学习、DOM、下载)
- 将域名加入白名单 — 白名单站点将绕过所有检查并立即返回安全
- 通过 `chrome.storage.sync` 在 Chrome 配置文件间同步设置
### 举报为钓鱼
弹出窗口中分析完成后会显示一个小的 **⚑ 举报** 按钮。点击它将:
- 在新标签页中打开 PhishTank 提交页面,以便向社区举报
- 将报告记录到本地(存储在 chrome.storage 的 `phishshield_reports` 中)
## 界面表现
悬停在任意网页的链接上时,光标附近会出现一个小药丸形徽章:
- **绿色** — 看起来安全
- **黄色** — 可疑,值得再看一眼
- **红色** — 多个危险标志,不要点击
点击工具栏中的扩展图标,可查看完整分析结果:风险分数、具体触发项,以及通俗易懂的解释。
## 已知限制
### Google Docs、Figma 等类似应用
这些应用不使用标准的 HTML `` 链接。它们在画布层上渲染所有内容并使用自定义点击处理程序,因此扩展无法挂钩到单个链接。悬停提示不会在这些应用内显示。
不过,扩展现在通过 `webNavigation.onCommitted` 检测所有顶级导航 — 因此通过这些应用导航到危险 URL 时,只要分数达到 70 或更高,仍会显示通知横幅。
仅影响悬停提示:Google Docs、Sheets、Slides、Figma、Notion(部分)。
### iframe
跨域 iframe 中的内容(内嵌广告等)由于浏览器安全策略无法被内容脚本访问,因此这些 iframe 内的链接不会显示提示。
### URL 缩短服务
扩展会将已知缩短域名(bit.ly、tinyurl 等)标记为可疑,因为真实目标被隐藏。若未部署 Cloudflare Worker,则无法跟随重定向。
## 快速开始
```
npm install
npm run build
```
然后在 Chrome 中打开:`chrome://extensions` → 开发者模式 → 加载已解压的扩展程序 → 选择 `dist/`
如需包含 API 密钥的完整配置说明,请参阅 [SETUP.md](./SETUP.md)
## 项目结构
```
src/
analysis/
urlAnalysis.js # Layer 1 — 14 URL heuristic checks
mlAnalysis.js # Layer 2 — in-browser MLP inference (18 features)
domAnalysis.js # Layer 3 — 10 DOM/page checks
downloadAnalysis.js # Layer 4 — 7 download checks
background/
background.js # Service worker, orchestrates all layers
api.js # Cloudflare Worker API client
content/
content.js # Hover tooltips, page analysis trigger
popup/
App.jsx # Main popup UI (includes report button)
RiskBadge.jsx # Big green/yellow/red status badge
ScoreBar.jsx # Risk score 0–100 bar
FlagList.jsx # Plain-English list of what was flagged
HelpSection.jsx # Collapsible explainer for non-technical users
options/
App.jsx # Settings page (layer toggles + whitelist)
main.jsx # React entry for options page
public/
model/
weights.json # Trained MLP weights + scaler params (~24 KB)
cloudflare-worker/
worker.js # Backend proxy for threat intelligence APIs
train_model/
train.py # scikit-learn training script → exports weights.json
requirements.txt # pip deps (scikit-learn, pandas, numpy, requests)
```
## 技术栈
- Chrome 扩展清单 V3
- React + Vite(弹出窗口 UI)
- scikit-learn MLP → 权重导出为 JSON,纯 JavaScript 前向传播(无需推理库)
- Cloudflare Workers(无服务器后端,免费额度)
- Google Safe Browsing API v4
- PhishTank API
标签:DNS枚举, DOM检查, IP伪装, MLP, SEO, TLD风险, Unicode同形字, URL分析, URL重定向, 中文关键词, 前端安全, 反钓鱼, 启发式检测, 品牌冒充, 域名欺骗, 威胁情报API, 安全浏览器工具, 实时检测, 密码学, 弹出警告, 恶意链接检测, 手动系统调用, 数字密度, 无障碍安全, 机器学习分类, 浏览器扩展, 熵值计算, 特征提取, 用户教育, 短链接检测, 神经网络, 程序员工具, 网络安全工具, 网络钓鱼防护, 自定义脚本, 表单劫持, 隐藏iframe, 页面分析