pbrigliadori/vuln-scanner
GitHub: pbrigliadori/vuln-scanner
一款基于 Next.js 的全栈 Web 漏洞扫描器,通过被动安全检查为网站生成分类报告与评分。
Stars: 0 | Forks: 0
# Vuln Scanner
全栈 Web 漏洞扫描器:您输入一个 URL,后端会并行运行一系列安全检查,前端则渲染出一份完整的报告——按严重程度分类,包含证据、每个漏洞的利用方式说明、修复建议、网站的优点以及最终评级(**安全** / **基本安全** / **不安全**)。
这是一个作品集项目。技术栈:**Next.js 16 (App Router) + TypeScript + Tailwind CSS**,100% 自包含——无需任何外部二进制文件(如 Nuclei、nmap 等)即可运行。
## 范围与道德准则
由于该工具接受任何访客输入的 URL,所有的检查都是**被动且低影响的**——这与 Mozilla Observatory、SecurityHeaders.com 或 SSL Labs 等公共服务所做的一样:读取 HTTP 标头、检查 TLS、cookies、DNS 记录,以及检查常被误公开的文件(`.env`、`.git/config` 等)。**没有暴力破解,没有针对第三方的主动 SQLi/XSS payload,也没有激进的枚举。**
即便如此,表单在扫描前仍需要明确的授权确认,系统内置了针对 IP 的 rate limiting,并且 API 会阻止任何扫描私有/内部地址的尝试(防 SSRF 保护)——因此该工具不能用于探测托管它的内部网络。
**请仅扫描您拥有或获得明确授权进行测试的域名。**
## 已实现的检查
| 模块 | 检查内容 |
|---|---|
| `headers` | HSTS、CSP、X-Content-Type-Options、Referrer-Policy、Permissions-Policy、COOP、X-Powered-By |
| `tls` | HTTPS 的使用、TLS 协议版本、证书的有效期/过期时间及信任度 |
| `cookies` | 每个返回的 cookie 的 `Secure`、`HttpOnly` 和 `SameSite` 标志 |
| `cors` | 结合了 `Access-Control-Allow-Credentials` 的任意源反射 |
| `disclosure` | `Server` 标头中暴露的软件版本、页面中的 stack traces |
| `exposed-files` | `.env`、`.git/config`、备份文件、`docker-compose.yml` 等的公开状态 |
| `dns-email` | 域名的 SPF 和 DMARC 记录 |
| `robots-sitemap` | `robots.txt` 中列出的敏感路径、`sitemap.xml` 的存在 |
| `clickjacking` | `X-Frame-Options` / CSP `frame-ancestors` 的组合 |
| `tech-fingerprint` | 技术检测(jQuery、Bootstrap、WordPress 等),并结合特定版本已知的小型 CVE 集合进行交叉比对 |
| `http-methods` | 通过 `OPTIONS` 启用的 HTTP 方法(TRACE、PUT、DELETE) |
| `security-txt` | `/.well-known/security.txt` 的存在 (RFC 9116) |
每项检查都独立运行并具有自己的 timeout;某个模块的失败不会导致整个扫描崩溃。所有模块都位于 `lib/scanners/` 中,并实现相同的接口 (`lib/scanners/types.ts`),因此添加新检查只需创建一个新文件并在 `lib/scanners/index.ts` 中注册即可。
## 架构
```
app/api/scan/route.ts → orquestra os scanners em paralelo e faz streaming
incremental do progresso (NDJSON) para o frontend
lib/http.ts → fetch com timeout + proteção anti-SSRF (bloqueia
IPs privados/loopback) + tolerância a certificados
inválidos (para o próprio scanner de TLS conseguir
analisá-los, em vez de simplesmente falhar a conexão)
lib/scanners/ → um módulo por checagem, todos implementando a
mesma interface Scanner
lib/report.ts → agrega os findings, calcula score/nota e veredito
lib/ratelimit.ts → rate limiting simples por IP
app/page.tsx → consome o stream NDJSON e renderiza progresso
ao vivo + relatório final
```
最终报告会计算一个 **0 到 100 的评分**(根据严重程度进行扣分)、一个 **A 到 F 的等级**,以及 **评级**:
- 🔴 **不安全** — 至少存在一个严重漏洞。
- 🟡 **基本安全** — 没有严重漏洞,但存在中级漏洞。
- 🟢 **安全** — 未发现严重或中级漏洞。
## 本地运行
```
npm install
npm run dev
```
打开 [http://localhost:3000](http://localhost:3000)。
## 部署
本项目旨在 100% 运行于 **Vercel (free tier)** —— 所有检查均为原生代码(headers、`node:tls`、`node:dns`、fetch),不依赖任何外部二进制文件,因此不需要任何 VPS。由于使用了 `node:tls`/`node:dns`,`/api/scan` 路由在 Node 运行时上运行(`export const runtime = "nodejs"`)。
## 未来演进
该架构在设计上考虑了 **可扩展性**:每项检查都是位于同一接口后的独立模块,因此如果未来项目转为在专用服务器而非 serverless 上运行,可以接入一个更重量级的引擎(例如:[Nuclei](https://github.com/projectdiscovery/nuclei))作为额外的 scanner。
标签:MITM代理, Snort++, Web安全, 主机安全, 安全合规检查, 实时处理, 插件系统, 自动化攻击, 蓝队分析, 被动扫描