lia-saud/LiaShield-AI
GitHub: lia-saud/LiaShield-AI
一款结合本地规则检测与AI解释的多语言浏览器扩展,旨在帮助普通用户识别钓鱼网站并提升安全意识。
Stars: 0 | Forks: 0
# 🛡️ LiaShield AI
**多语言人工智能辅助钓鱼检测浏览器扩展**
LiaShield AI 是一款 Chrome 浏览器扩展,帮助普通用户检测钓鱼网站和可疑网站。它结合了**基于规则的钓鱼检测**和**阿拉伯语与英语的AI驱动解释**功能。
## 📖 目录
1. [项目概述](#-project-overview)
2. [架构设计](#-architecture)
3. [多语言支持](#-multilingual-support)
4. [安装指南](#-installation-guide)
5. [加载扩展](#-loading-the-extension)
6. [后端设置](#-backend-setup)
7. [OpenAI 设置](#-openai-setup)
8. [安全考虑](#-security-considerations)
9. [高级安全功能](#-advanced-security-features)
10. [钓鱼检测方法](#-phishing-detection-methodology)
11. [标准灵感来源](#-standards-inspiration)
12. [局限性](#-limitations)
13. [故障排除](#-troubleshooting)
14. [简历描述](#-cv-description)
15. [面试问题与答案](#-interview-questions--answers)
## 🎯 项目概述
钓鱼攻击仍然是全球头号攻击媒介。大多数受害者是非技术用户,无法评估 URL 的合法性。LiaShield AI 通过以下方式帮助此类用户:
- 使用**先进的加权钓鱼检测启发式规则**在本地分析当前网页。
- 计算一个**风险评分(0-100)** 并进行分类(低 / 中 / 高 / 严重)。
- 仅将**安全的元数据**发送到后端,后端调用 **OpenAI** 生成**易于理解的解释**。
- 以**阿拉伯语或英语**显示所有内容,并提供完整的 RTL/LTR 布局支持。
### 主要功能
- ✅ **混合检测** — 基于规则的引擎 + AI 解释
- ✅ **注重隐私** — 从不收集密码、cookies 或表单值
- ✅ **多语言** — 阿拉伯语和英语,自动检测浏览器语言
- ✅ **安全架构** — API 密钥仅存在于后端
- ✅ **符合 Manifest V3** 规范
- ✅ **教育性** — 每个检测规则都有文档说明
## 🏗 架构设计
```
┌─────────────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Chrome Extension │ │ Node.js Backend │ │ OpenAI API │
│ (Client Side) │──────▶│ (Express.js) │──────▶│ (LLM Layer) │
│ │ │ │ │ │
│ • Rule Engine │◀──────│ • Validation │◀──────│ Explanation │
│ • Popup UI │ │ • Rate Limiting │ │ │
│ • Content Script │ │ • OpenAI Call │ │ │
└─────────────────────┘ └──────────────────┘ └──────────────┘
```
### 组件职责
| 组件 | 职责 |
|------------------|--------------------------------------------------------------------------|
| `manifest.json` | 声明权限、入口点、CSP(Manifest V3) |
| `content.js` | 在网页内运行;仅收集安全元数据 |
| `popup.html/css` | 用户点击扩展图标时显示的用户界面 |
| `popup.js` | 规则引擎 + UI 逻辑 + 后端通信 |
| `translations.js`| 阿拉伯语/英语翻译字典 |
| `server.js` | Express 后端;验证输入;调用 OpenAI |
| `.env` | 存储密钥(API 密钥)— 永不纳入版本控制 |
### 数据流
1. 用户在弹出窗口中点击 **分析** 按钮。
2. `popup.js` 向活动标签页中的 `content.js` 发送 `collectMetadata` 消息。
3. `content.js` 返回安全元数据(URL、主机名、标题、表单信息 — 无值)。
4. `popup.js` 在本地运行 **12+ 条规则** 并计算风险评分。
5. 本地结果**立即**显示(无需网络)。
6. `popup.js` 将元数据 + 评分发送到后端。
7. 后端**验证**有效负载,构建防御性提示,并调用 OpenAI。
8. OpenAI 以用户的语言返回解释。
9. 后端将解释转发给弹出窗口。
10. 弹出窗口在“AI 解释”部分显示解释。
### 工作原理
1. **`translations.js`** 持有一个字典:`translations[lang][key] = "text"`。
2. 弹出窗口加载时,语言由以下方式确定:
- 用户保存的偏好(`chrome.storage.local`)
- 回退到 `navigator.language`
- 回退到英语
3. `applyLanguage(lang)` 函数:
- 为阿拉伯语设置 `` 或为英语设置 `dir="ltr"`。
- 用翻译文本替换每个元素的文本内容。
4. CSS 使用 `[dir="rtl"]` 选择器和逻辑属性实现自动布局翻转。
5. 切换按钮可在语言间即时切换并保存偏好。
### 添加新语言
例如添加西班牙语:
1. 在 `translations.js` 中添加新的 `es: { ... }` 块。
2. 更新 `detectBrowserLanguage()` 以检测西班牙语。
3. 添加按钮或选择器以切换到它。
## 🛠 安装指南
### 前提条件
- **Node.js** v18+(用于后端)
- **npm**(随 Node.js 一起安装)
- **Google Chrome** 或任何基于 Chromium 的浏览器(Edge、Brave)
- **OpenAI API 密钥**(从 https://platform.openai.com/api-keys 获取)
## 🔌 加载扩展
1. 打开 Chrome 并导航到 `chrome://extensions/`
2. 启用 **开发者模式**(右上角)
3. 点击 **加载已解压的扩展程序**
4. 选择 `extension/` 文件夹
5. LiaShield AI 图标应出现在工具栏中
## ⚙️ 后端设置
```
cd backend
npm install
cp .env.example .env
# 编辑 .env 并添加您的 OPENAI_API_KEY
npm start
```
服务器将运行在 `http://localhost:3000`。使用以下命令验证:
```
curl http://localhost:3000/health
# {"status":"ok","service":"LiaShield AI Backend",...}
```
## 🔑 OpenAI 设置
1. 访问 https://platform.openai.com/api-keys
2. 点击 **Create new secret key**
3. 复制密钥(以 `sk-` 开头)
4. 将其粘贴到 `.env` 文件中,格式为 `OPENAI_API_KEY=sk-...`
5. **切勿将 `.env` 提交到 git。** 确保 `.env` 在 `.gitignore` 中。
### 为什么需要后端?
如果我们将 OpenAI 密钥放在扩展中,任何人都可以:
- 打开扩展文件夹
- 读取源代码
- 窃取密钥
- 刷爆你的账单
后端中介的 AI 调用是**任何使用付费 AI 服务的客户端应用程序的行业标准架构**。
## 🔒 安全考虑
### 我们收集的内容:
- URL、主机名、协议、页面标题
- 表单/密码字段的数量(仅布尔值)
- 链接/iframe 的数量
### 我们不收集的内容:
- 密码值
- 表单输入值
- Cookies、会话令牌
- 个人数据
- 浏览记录
### 防御层
| 层级 | 保护措施 |
|------------------------|-------------------------------------------------------------|
| **Manifest V3 + CSP** | 阻止远程代码执行,限制内联脚本 |
| **最小权限** | 仅 `activeTab`、`scripting`、`storage` 权限 |
| **输入验证** | 后端净化每个字段 |
| **速率限制** | 防止 DoS 和 OpenAI 成本滥用 |
| **输出转义** | 在注入 DOM 之前对 AI 响应进行 HTML 转义 |
| **防御性提示** | 告知 OpenAI 进行解释,而非决策 |
| **密钥隔离** | API 密钥仅存在于后端 `.env` 中 |
| **生产环境 HTTPS** | 部署时后端必须运行在 TLS 后面 |
## 🔒 高级安全功能
### 附加保护层
| 层级 | 目的 |
|-------|------|
| 防御性提示工程 | 减少提示注入操纵 |
| 后端 AI 中介 | 将 API 密钥与客户端隔离 |
| 输入净化 | 在 AI 处理前清理传入有效负载 |
| HTML 输出转义 | 防止不安全的 DOM 注入 |
| 速率限制 | 防止滥用和过度 API 使用 |
| 扩展钓鱼启发式规则 | 检测其他可疑的 URL 行为 |
| 安全多语言渲染 | 为阿拉伯语和英语提供安全的 RTL/LTR 渲染 |
## 🔍 钓鱼检测方法
### 基于规则的指标
| # | 指标 | 为何可疑 | 分值 |
|---|--------------------------------|--------------------------------------------------------|------|
| 1 | 使用 HTTP 而非 HTTPS | 合法的现代网站使用 HTTPS | 20 |
| 2 | 基于 IP 的 URL | 绕过域名黑名单 | 25 |
| 3 | URL 中包含 "@" | 隐藏 @ 之后的真实目的地 | 20 |
| 4 | URL 长度 > 100 | 钓鱼者填充 URL 以隐藏域名 | 10 |
| 5 | 2 个以上可疑关键词 | 如 "verify"、"secure"、"login" 等词同时出现 | 15 |
| 6 | 4 个以上子域名 | `paypal.com.evil.tk` 模式 | 15 |
| 7 | 大量编码字符 | `%XX` 编码可混淆意图 | 10 |
| 8 | 域名中包含 3 个以上连字符 | `secure-login-verify-paypal.com` | 10 |
| 9 | 存在登录表单 | 结合其他指标 = 高风险 | 5 |
| 10| 标题与域名不匹配 | 在 `evil-site.tk` 上显示 "PayPal Login" | 20 |
| 11| Punycode (`xn--`) | 同形异义字攻击(西里尔字母相似字符) | 20 |
| 12| 已知的 URL 缩短服务 | 缩短服务隐藏真实目的地 | 10 |
总分上限为 100 分。
### 风险等级
| 分数 | 等级 |
|----------|-----------|
| 0–24 | 低 |
| 25–49 | 中 |
| 50–74 | 高 |
| 75–100 | 严重 |
### 为什么先基于规则检测,再用 AI?
1. **确定性**:规则给出可预测、可解释的结果。
2. **隐私性**:本地规则不会将你的 URL 发送到云端,除非必要。
3. **速度**:规则在毫秒内运行。
4. **无幻觉**:AI 可能虚构威胁;规则不会。
5. **成本**:规则是免费的;AI 调用需要花费。
## 📚 标准灵感来源
本项目**借鉴**了以下标准(不声称获得认证合规):
- **OWASP Top 10**:输入验证、输出编码、密钥管理、安全头、速率限制。
- **NIST 网络安全框架**:识别(检测规则)、保护(架构)、检测(实时分析)、响应(建议)。
- **ISO/IEC 27001 概念**:基于风险的评分、资产清单最小化(数据最小化)、审计日志。
## ⚠️ 局限性
- **误报**:合法网站可能触发规则(长 URL、登录表单)。
- **无域名信誉**:我们不检查 WHOIS、证书透明度日志或威胁源。
- **无实时更新**:规则列表是硬编码的,不是从威胁情报 API 获取。
- **仅限本地**:不扫描附件、下载内容或电子邮件内容。
- **AI 依赖性**:解释质量取决于 OpenAI 的正常运行时间。
- **教育范围**:未为生产环境进行渗透测试。
## 🐛 故障排除
### 扩展无法加载
- 验证 `chrome://extensions/` 中开发者模式已开启
- 检查 Chrome 控制台中的 `manifest.json` 错误
### 弹出窗口显示 "Could not reach AI backend"
- 确保 `backend/` 中已运行 `npm start`
- 测试 `curl http://localhost:3000/health`
- 检查 `popup.js` 中的 `BACKEND_URL` 是否与你的服务器端口匹配
### OpenAI 返回错误
- 验证你的 `OPENAI_API_KEY` 有效且有额度
- 检查你的 OpenAI 账户上的速率限制
### 阿拉伯语文本显示异常
- 确保你的浏览器支持阿拉伯语字体
- 检查是否已应用 `dir="rtl"`(使用 DevTools)
### 内容脚本未在页面上运行
- 某些页面(`chrome://`、应用商店)设计上会阻止扩展程序——这是预期行为
## 💼 简历描述
## 🎤 面试问题与答案
### Q1:为什么将 OpenAI API 密钥放在后端而不是扩展中?
### Q2:为什么在调用 AI 之前进行基于规则的检测?
**A:** 三个原因:
1. **确定性** — 规则给出可预测、可审计的结果。AI 可能产生幻觉。
2. **隐私性** — 本地规则不会将 URL 发送到云端,除非必要。
3. **性能与成本** — 规则在毫秒内运行且免费;AI 调用需要花费并增加延迟。
AI 的任务是**用友好的语言解释**规则引擎的裁决,而不是自己做决定。这就是 **“AI 辅助,规则决策”** 的模式。
### Q3:如何防止提示注入攻击?
**A:** 多个层级:
1. **输入验证** — 每个字段都进行类型检查和长度限制。
2. **净化处理** — 从所有字符串中去除控制字符。
3. **防御性提示** — 系统提示明确告知 AI 忽略用户数据中的指令,只解释预计算的指标。
4. **低温度(0.4)** — 减少创造性偏差。
5. **最大 token 限制** — 限制 AI 的输出量。
### Q4:多语言系统如何工作?
**A:** 我使用**基于 i18n 键的翻译模式**。`translations.js` 文件持有一个以语言代码为键的字典。每个 UI 元素都有一个映射到翻译键的 ID。加载时,我使用 `navigator.language` 检测浏览器语言,回退到存储的偏好设置,并通过 `applyLanguage(lang)` 函数应用翻译。该函数还为阿拉伯语设置 `dir="rtl"`,这会通过 `[dir="rtl"]` 选择器和逻辑 CSS 属性触发 CSS 布局翻转。
### Q5:什么是 Manifest V3,为什么它对安全性很重要?
**A:** Manifest V3 是最新的 Chrome 扩展规范。与 V2 相比的关键安全改进:
- **无远程代码执行** — 脚本必须与扩展捆绑在一起。
- **Service Worker 取代后台页面** — 临时的,无持久上下文。
- **更严格的内容安全策略** — 阻止内联脚本和 `eval()`。
- **基于 Promise 的 API** — 鼓励更安全的异步模式。
这显著减少了攻击面。我的扩展严格遵循 V3。
### Q6:请描述用户点击“分析”后发生的过程。
**A:**
1. `popup.js` 通过 `chrome.tabs.sendMessage` 向 `content.js` 发送 `collectMetadata` 消息。
2. `content.js` 读取 DOM 并返回安全元数据(URL、标题、表单计数 — 无值)。
3. `popup.js` 运行 `analyzeRulesLocally()` — 12+ 条规则,每条规则贡献加权分数。
4. 分数上限为 100,并分配风险等级。
5. 立即渲染本地结果。
6. 如果分数 ≥ 低阈值,`fetchAIExplanation()` 将元数据 POST 到 `/api/analyze`。
7. 后端验证有效负载,构建防御性提示,使用 `temperature: 0.4` 调用 OpenAI。
8. 解释返回;弹出窗口对其进行 HTML 转义并渲染。
### Q7:如何将其扩展到生产环境?
**A:**
- **后端**:部署到 AWS/GCP 并置于 HTTPS 之后,使用托管的密钥存储(AWS Secrets Manager),添加可观测性(日志、指标、警报)。
- **缓存**:使用 Redis 缓存热门可疑 URL 的 AI 解释,以降低 OpenAI 成本。
- **威胁源**:集成 Google Safe Browsing、PhishTank。
- **遥测**:关于规则有效性的隐私保护匿名指标。
- **A/B 测试**:根据真实数据调整规则权重。
- **CSP 强化**:将 `host_permissions` 限制为你的生产后端域名。
- **代码签名**:通过 Chrome 应用商店发布并进行适当验证。
### Q8:你的检测方法有何局限性?
**A:**
- 启发式规则会产生**误报**(合法网站上的长 URL)。
- 无**证书检查**或 **WHOIS** — 我们会错过新注册的域名。
- 无**实时威胁情报** — 规则列表是静态的。
- AI **幻觉**可能误导用户 — 通过防御性提示缓解但未消除。
- 不扫描**电子邮件附件**或**下载内容** — 仅扫描渲染的 DOM。
生产系统会将我的方法与信誉服务和在钓鱼数据集上训练的机器学习分类器相结合。
### Q9:为什么选择 Express 而不是其他后端框架?
**A:** Express 轻量级、文档完善且久经考验。对于这种规模的项目,更重的框架(如 NestJS)会增加不必要的复杂性。Express 还有成熟的中间件满足我所有的需求:`cors`、`express-rate-limit`、body parsing。如果我需要更多结构(DI、装饰器、GraphQL),我会考虑 NestJS。
### Q10:如何保护用户隐私?
**A:** 几项原则:
- **数据最小化**:我只收集必要的内容(URL 元数据),从不收集表单值或 cookies。
- **本地优先分析**:基于规则的检测在浏览器中运行;判定结果无需网络。
- **不持久存储用户数据**:后端不持久记录 URL。
- **无第三方分析**。
- **用户控制**:除非用户点击“分析”,否则不会发送任何数据。
## 📄 许可证
MIT — 免费用于教育和个人用途。
**用 ❤️ 为更安全的浏览而构建 — 网络上保持警惕。**
标签:AI解释, AI辅助分析, IPv6支持, Manifest V3, MITM代理, OpenAI, OpenAI集成, Petitpotam, 云计算, 人工智能, 内存规避, 后端开发, 多语言支持, 安全测试框架, 恶意网站检测, 数据可视化, 本地检测, 浏览器扩展, 浏览器插件, 用户保护, 用户模式Hook绕过, 网络安全, 网络安全, 英语, 规则引擎, 钓鱼检测, 钓鱼防护, 阿拉伯语, 隐私保护, 隐私保护, 风险评分