AdheeshaRavindu/GhostLink
GitHub: AdheeshaRavindu/GhostLink
GhostLink 是一款轻量级无服务器 URL 安全情报扫描器,通过多维度启发式分析为链接生成风险评分和安全建议。
Stars: 0 | Forks: 0
# GhostLink
GhostLink 是一款轻量级的 URL 安全情报扫描器,旨在分析链接以确保用户在交互前的安全。它结合了启发式威胁检测、安全标头检查、域名情报、重定向分析和元数据提取,从而生成综合风险评分和明确的建议。
它被设计为完全无服务器的前端加上 Cloudflare Worker 后端。
## 屏幕截图




## 概览
- Frontend:Vanilla HTML, CSS 和 JavaScript
- Backend:Cloudflare Worker
- 输出:安全评分、风险等级、发现项、详细信息和推荐建议
- 存储:无数据库,不保留 URL 记录
- 部署:Cloudflare Pages, GitHub Pages, Netlify, Vercel 或任何静态主机
## GhostLink 的功能
GhostLink 从多个安全维度评估 URL:
- 钓鱼指标,例如基于 IP 的 URL、@ 符号、可疑关键词、过多子域名和长域名
- 传输安全检查,包括 HTTPS 验证、重定向行为和 HSTS 存在性
- 安全标头检查,包括 Content-Security-Policy、X-Frame-Options、X-Content-Type-Options、Referrer-Policy 和 Permissions-Policy
- 域名情报,例如 Punycode 检测、可疑 TLD、主机名熵、数字标签和连字符标签
- 信誉启发式分析,例如长 URL、编码字符和路径中的高随机性
- 重定向链分析,以检测多跳或可疑的重定向行为
- 页面元数据、服务器信息和 DNS 相关诊断
结果是 0 到 100 的评分以及人类可读的风险等级:
- 0 至 30:低
- 31 至 70:中
- 71 至 100:高
## 分析流程原理
1. 用户在前端输入 URL。
2. 前端验证输入,并将缺失的协议统一为 HTTPS。
3. 浏览器向 Cloudflare Worker 的 `/analyze` 发送 POST 请求。
4. Worker 运行分析管道:
- 钓鱼检查
- HTTPS 和 SSL 检查
- 安全标头检查
- 重定向链检查
- 元数据提取
- 服务器检查
- DNS 推断
- 域名情报
5. Worker 计算最终评分和风险等级。
6. 前端渲染:
- 安全分析摘要
- 按类别分组的发现项
- 详细的 URL 情报
- 安全建议
## 用户界面部分
GhostLink 的 UI 分为清晰的部分:
- 页眉:产品名称、副标题和简短的功能标签
- 输入面板:URL 字段和分析按钮
- 安全分析摘要:评分、风险等级、评分条和总体说明
- 安全发现:扫描器检测到的分组问题
- URL 情报:协议、域名、元数据、服务器、DNS 和域名情报的技术细分
- 安全提示:基于风险和发现项的面向用户的建议
- 页脚:归属和页面元数据
## 项目结构
```
GhostLink/
├── index.html
├── style.css
├── script.js
├── SETUP.md
├── README.md
├── LICENSE
├── _headers
├── Screenshot 2026-04-04 180952.png
├── Screenshot 2026-04-04 181016.png
├── Screenshot 2026-04-04 181039.png
├── Screenshot 2026-04-04 181054.png
└── ghostlink/
└── worker-production.js
```
## 前端行为
前端使用纯 JavaScript 构建,设计简单直观。
关键行为:
- 验证输入是否为 URL
- 当协议缺失时自动添加 `https://`
- 向 Worker API 发送请求
- 分析开始时扩展布局
- 滚动结果视图,使摘要立即可见
- 在桌面和移动设备上渲染技术术语的工具提示
主要前端配置是 `script.js` 中的 Worker URL 常量。
## API 参考
### 端点
`POST /analyze`
### 请求头
```
Content-Type: application/json
```
### 请求体
```
{
"url": "https://example.com"
}
```
URL 必须包含 `http://` 或 `https://`。
### 成功响应
```
{
"success": true,
"data": {
"score": 42,
"riskLevel": "Medium",
"findings": [
{
"type": "No HTTPS",
"category": "HTTPS & SSL",
"description": "URL does not use HTTPS encryption",
"points": 20
}
],
"details": {
"url": "http://example.com",
"components": {
"protocol": "http:",
"domain": "example.com",
"port": "80",
"pathDepth": 0,
"pathLength": 1,
"queryParamCount": 0,
"hasFragment": false,
"domainParts": 2
},
"metadata": null,
"server": null,
"dns": null,
"domainIntel": null
},
"recommendations": [
"⚠️ Be cautious with this site — it has some security concerns. Avoid entering sensitive data."
]
}
}
```
### 错误响应
Worker 可能返回以下错误代码:
- `INVALID_INPUT` - JSON 请求体未包含 URL 字符串
- `EMPTY_URL` - 修剪后的 URL 值为空
- `MISSING_PROTOCOL` - URL 未以 `http://` 或 `https://` 开头
- `ANALYSIS_ERROR` - 分析管道失败
- `INTERNAL_ERROR` - 请求无法处理
- `NOT_FOUND` - 任何不支持的路由
## 响应数据模型
### score
最终数值风险评分。数值越高意味着风险越高。
### riskLevel
以下值之一:
- Low
- Medium
- High
### findings
检测到的問題数组。每项包括:
- type
- category
- description
- points
### details
被分析 URL 的技术支持数据:
- url:规范化后的输入 URL
- components:协议、域名、端口、路径深度、路径长度、查询计数和片段存在性
- metadata:页面标题、描述、内容类型、语言、字符集、网站图标和表单存在性
- server:状态码、状态消息、响应时间、服务器标头、重定向链、安全标头和技术提示
- dns:域名、解析出的 IP(如有)和查找时间
- domainIntel:可注册域名、TLD 类别、子域名配置、熵和标签指标
### recommendations
基于检测到的问题和风险等级的简短、用户友好的指导。
## 评分逻辑
GhostLink 使用启发式评分。每个发现项都有一个分值,某些类别的权重高于其他类别。
Worker 中的加权类别:
- Phishing Risk:1.3
- HTTPS & SSL:1.4
- Security Headers:1.2
- Domain Intelligence:1.25
- Reputation:1.0
- Redirect Chain:1.35
然后 Worker 将最终分数映射到前面列出的风险等级。
## 检测规则
### Phishing Risk (钓鱼风险)
- URL 中直接使用 IP 地址
- URL 中使用 `@`
- 过多的子域名
- 可疑关键词,例如 login, verify, secure, update, bank 和 free
- 异常长的域名
### HTTPS 和 SSL
- 缺少 HTTPS
- 未重定向到 HTTPS 的 HTTP URL
- 缺少 HSTS 标头
### Security Headers (安全标头)
- 缺少 Content-Security-Policy
- 缺少 X-Frame-Options
- 缺少 X-Content-Type-Options
- 缺少 Strict-Transport-Security
- 缺少 Referrer-Policy
- 缺少 Permissions-Policy
### Domain Intelligence (域名情报)
- 可疑的顶级域名
- Punycode 或同形异义字风格域名
- 子域名数量和配置
- 主机名熵
- 数字标签
- 连字符标签
### Reputation (信誉)
- 非常长的 URL
- URL 中包含编码字符
- 路径或查询字符串中的高熵
### Redirect Chain (重定向链)
- 超过允许阈值的重定向链
## 本地开发
### 环境要求
- Git
- 浏览器
- 如果要运行 worker 后端,需要 Cloudflare 账户
### 本地运行前端
您可以直接在浏览器中打开 `index.html`,但建议使用本地服务器。
```
python -m http.server 8000
```
然后打开:
```
http://localhost:8000
```
### 重要提示
如果您直接使用 `file://` 打开文件,浏览器获取行为可能会受到限制。请使用本地服务器以获得最佳体验。
## Cloudflare Worker 设置
1. 打开 Cloudflare 控制面板。
2. 创建一个新的 Worker。
3. 将 `ghostlink/worker-production.js` 的内容复制到 Worker 编辑器中。
4. 部署 Worker。
5. 复制以 `/analyze` 结尾的 Worker URL。
6. 更新 `script.js` 中的 `WORKER_URL`。
示例:
```
const WORKER_URL = 'https://your-worker.your-subdomain.workers.dev/analyze';
```
## Cloudflare Pages 部署
1. 将仓库连接到 Cloudflare Pages。
2. 不使用构建命令。
3. 使用 `/` 作为输出目录。
4. 部署站点。
该仓库已包含用于静态托管安全标头的 `_headers`。
## 其他部署选项
### GitHub Pages
将仓库作为静态站点从主分支托管。
### Netlify
拖放项目文件夹或通过 Git 连接仓库。
### Vercel
作为无构建步骤的静态项目部署。
## 故障排除
### 扫描器提示分析失败
- 验证 `script.js` 中的 Worker URL 是否正确
- 确认 Worker 已部署且可访问
- 检查浏览器控制台错误
### 我看到 CORS 错误
确保 Worker 返回前端期望的 CORS 标头:
```
{
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type'
}
```
### 页面加载但没有结果显示
- 检查 URL 是否包含 `http://` 或 `https://`
- 确认 Worker 端点为 `/analyze`
- 确保站点未被浏览器隐私设置或网络限制阻止
### 安全标头看起来不完整
- 某些站点有意省略标头
- 某些响应标头不会暴露给跨域请求
- 重定向和 CDN 层可能会改变可见的标头
## 隐私和安全说明
- GhostLink 不存储被分析的 URL。
- 分析按需进行。
- 该项目专为检查而设计,而非持久化存储。
- 结果为启发式分析,应被视为一种安全信号,而非最终结论。
## 局限性
- 启发式扫描器可能会产生误报。
- 某些站点会阻止 `HEAD` 请求或限制元数据访问。
- DNS 信息是在 Worker 环境无法直接查找的情况下推断出来的。
- 重定向和标头可见性可能因目标站点和 CDN 行为而异。
## 自定义
您可以通过多种方式调整 GhostLink:
- 在 `index.html` 中更改品牌
- 在 `style.css` 中调整视觉设计
- 在 `script.js` 中调整前端行为
- 在 `ghostlink/worker-production.js` 中修改评分逻辑和检测规则
## 许可证
有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
由 Adheesha 精心制作
标签:C++17, CSP, DNS诊断, HSTS, HTTPS校验, HTTP头分析, Object Callbacks, URL扫描器, Web安全, XSS防护, 云安全监控, 内容安全策略, 前置防御, 反欺诈, 在线安全, 域名信誉, 域名安全, 多模态安全, 威胁情报, 安全标准, 开发者工具, 恶意链接, 程序员工具, 网络安全, 网络钓鱼, 自定义脚本, 蓝队分析, 规则仓库, 轻量级工具, 重定向分析, 钓鱼检测, 隐私保护, 静态分析