AlirezaAlavi7713/web-vulnerability-scanner

GitHub: AlirezaAlavi7713/web-vulnerability-scanner

面向教育场景的 Web 漏洞扫描器,分析公开网站的 HTTP 安全标头、信息泄露、HTTPS 配置等并给出安全评分。

Stars: 0 | Forks: 0

# Web 漏洞扫描器 一个用于分析公开网站 HTTP 安全配置的全栈教育工具。 ## 技术栈 | 层级 | 技术 | |-----------|-------------------------------------------| | Frontend | React 19 + Vite 5 | | Backend | Node.js + Express 4 | | HTTP | Axios (Backend 端客户端) | | 安全 | Helmet, express-rate-limit | ## 分析功能 ### 1. 安全标头 | 标头 | 作用 | 分数 | |---|---|---| | `Strict-Transport-Security` | 强制使用 HTTPS,防范 MITM | 15 | | `Content-Security-Policy` | 限制资源来源,阻断 XSS | 15 | | `X-Frame-Options` | 阻止通过 iframe 进行的点击劫持 | 10 | | `X-Content-Type-Options` | 阻止 MIME 嗅探 | 10 | | `Referrer-Policy` | 控制 URL 泄露 | 5 | | `Permissions-Policy` | 限制浏览器 API 的使用 | 5 | ### 2. 信息泄露 - `Server` 标头 — 暴露服务器端技术(例如:`Apache/2.4.41`) - `X-Powered-By` 标头 — 暴露框架(例如:`Express`) - 未设置 `HttpOnly` 标志的 Cookies — 可通过 JavaScript 访问(存在 XSS 盗取风险) - 未设置 `Secure` 标志的 Cookies — 可能通过 HTTP 明文传输 ### 3. HTTPS - 使用 HTTPS 还是 HTTP - 是否存在从 HTTP 到 HTTPS 的重定向 ### 4. 安全评分 (0–100) 每个检查点都会被标记为 **OK** (绿色) / **警告** (橙色) / **危险** (红色)。 | 分数 | 评级 | 含义 | |---|---|---| | 80–100 | A | 优秀 | | 60–79 | B | 良好 | | 40–59 | C | 中等 | | 0–39 | D | 不足 | ## SSRF 防护 (Server-Side Request Forgery) 后端会拒绝指向以下地址的 URL 请求: - **私有 IP**:`10.x.x.x`, `172.16–31.x.x`, `192.168.x.x` - **环回地址 (Loopback)**:`127.x.x.x`, `::1`, `0.x.x.x` - **链路本地地址 (Link-local)**:`169.254.x.x`(包含 AWS/GCP 的 metadata `169.254.169.254`) - **本地主机名**:`localhost`, `*.local`, `*.internal`, `*.localhost` - **解析为私有 IP 的 DNS** — 防范 DNS 绕过攻击 ## 安装与启动 ### Backend ``` cd backend npm install cp .env.example .env npm start # http://localhost:3001 ``` 服务器将在端口 **3001** 上启动(以避免与端口 3000 上的其他项目发生冲突)。 ### Frontend ``` cd frontend npm install npm run dev # http://localhost:5173 ``` ## API ### `POST /api/scan` **请求体:** ``` { "url": "https://example.com" } ``` **响应:** ``` { "url": "https://example.com", "scannedAt": "2025-01-01T12:00:00.000Z", "score": 72, "statusCode": 200, "https": { "usesHttps": true, "redirectsToHttps": false, "status": "OK", "description": "HTTPS actif. Cependant, aucune redirection HTTP → HTTPS détectée." }, "headers": { "strict-transport-security": { "name": "Strict-Transport-Security (HSTS)", "present": true, "value": "max-age=31536000; includeSubDomains", "status": "OK", "description": "HSTS actif. Le navigateur est forcé à utiliser HTTPS.", "score": 15 } }, "leakage": { "server": { "name": "Header Server", "exposed": false, "value": null, "status": "OK" }, "xPoweredBy": { "name": "Header X-Powered-By", "exposed": true, "value": "Express", "status": "WARNING" }, "cookies": [ { "name": "session", "hasHttpOnly": true, "hasSecure": false, "status": "WARNING" } ] } } ``` **限制:** - 每 15 分钟窗口期内限制 20 次请求 (rate limiting) - 拒绝私有或本地 URL (SSRF 防护) ## 本项目涵盖的知识点 | 概念 | 说明 | |---|---| | **HTTP 安全标头** | 每个标头存在的目的及其防范的攻击类型 | | **SSRF** | 服务器如何被利用来攻击其自身的内部网络 | | **安全 Cookies** | `HttpOnly`、`Secure` 的区别及相关的安全风险 | | **信息泄露** | 为何隐藏 `Server` 和 `X-Powered-By` 能减少攻击面 | | **HTTPS 与 HTTP** | “拥有证书”与“强制使用 HTTPS”之间的区别 | | **Rate limiting** | 保护公共 API 免遭滥用的基础防护措施 | | **输入验证** | 为什么永远不要信任用户提供的 URL | ## 项目结构 ``` web-vulnerability-scanner/ ├── backend/ │ ├── index.js # Point d'entrée Express │ ├── routes/ │ │ └── scan.js # POST /api/scan │ ├── services/ │ │ └── scanner.js # Logique d'analyse HTTP │ ├── utils/ │ │ └── urlValidator.js # Validation + protection SSRF │ ├── .env.example │ └── package.json ├── frontend/ │ ├── src/ │ │ ├── App.jsx # État global, orchestration │ │ ├── App.css # Styles (dark theme) │ │ ├── components/ │ │ │ ├── ScanForm.jsx # Formulaire URL │ │ │ ├── Dashboard.jsx # Affichage résultats │ │ │ ├── ScoreCircle.jsx # Score SVG animé │ │ │ └── CheckItem.jsx # Ligne de vérification │ │ └── services/ │ │ └── api.js # Client Axios │ ├── index.html │ └── package.json └── README.md ```
标签:GNU通用公共许可证, HTTP安全审计, MITM代理, Node.js, React, Syscalls, Web漏洞扫描器, 安全合规检测, 自定义脚本