OmarAlali5/VulnLens
GitHub: OmarAlali5/VulnLens
一个现代的网站安全配置扫描器,通过分析TLS、HTTP头、端口和技术栈来评估网站安全态势并生成专业报告。
Stars: 1 | Forks: 0
VulnLens
A modern, scalable, and defensive website security scanner API & Dashboard
[](https://www.python.org/downloads/) [](https://fastapi.tiangolo.com) [](https://docs.celeryq.dev/) [](https://react.dev/) [](https://opensource.org/licenses/MIT)**VulnLens** 是一个网站安全扫描器。它通过分析 HTTP 安全头、TLS 证书、常见 TCP 端口和技术栈来执行全面的态势检查。其设计注重可扩展性,采用异步架构以高效处理并发扫描,并为其发现生成专业的 PDF 报告。 ## 主要特性 * **全面的扫描模块:** * **SSL/TLS:** 证书过期、证书链信任、主机名匹配、密钥强度、协商的 TLS 版本和密码套件检查。 * **HTTP 头部:** HSTS、CSP、X-Frame-Options、Cookie 标志和服务器信息泄露分析。 * **端口扫描:** 针对精选端口列表进行快速、异步的 TCP 探测,以识别暴露的高风险服务(例如 Telnet、RDP、Redis)。 * **技术指纹识别:** 通过头部和正文特征被动检测底层技术、CMS 平台和框架。 * **生产级架构:** 通过 **Celery** 和 **Redis** 进行后台作业处理,确保 API 保持极速响应,而 **PostgreSQL** 提供持久化的作业和结果历史记录。 * **专业报告:** 使用 WeasyPrint 和 Jinja2 将详细的发现、严重性摘要和特定模块数据导出为高度精美的 PDF 报告。 * **现代前端:** 使用 **React 19**、**Vite** 和 **Tailwind CSS v4** 构建的美观、响应式 UI,用于管理扫描和可视化报告。 * **内置安全:** SSRF 缓解措施可防止扫描私有/回环地址目标。可选的 API 密钥认证保护您的端点。安全的套接字交互,无 `subprocess` 或 shell 执行。 ## 截图 * **仪表板预览**  * **新建扫描**  * **扫描历史与下载 PDF**  * **PDF 报告**  ## 架构 VulnLens 将 Web 路由与繁重的网络扫描逻辑完全解耦,以保证最大吞吐量和非阻塞 I/O。 ``` graph LR Client([Client / Frontend UI]) -- REST API --> API[FastAPI Server] API -- Read/Write --> DB[(PostgreSQL)] API -- Enqueue Task --> Broker[(Redis Broker)] Broker -- Consume Task --> Worker[Celery Worker] Worker -- Scan --> Target((Target Server)) Worker -- Save Results --> DB ``` ### 技术栈 * **后端:** FastAPI, Pydantic, SQLAlchemy, Alembic * **工作者:** Celery, Redis * **数据库:** PostgreSQL * **扫描引擎:** `httpx`, `cryptography`, 标准库 `ssl`/`socket` * **报告生成:** Jinja2, WeasyPrint * **前端:** React 19, Vite, Tailwind CSS, TanStack React Query ## 快速入门(Docker) 启动并运行 VulnLens 最快的方式是使用 Docker Compose。 ### 前置条件 * Docker & Docker Compose ### 运行环境 1. 克隆仓库: git clone https://github.com/OmarAlali5/vulnlens.git cd vulnlens 2. 启动后端服务: docker compose up --build -d 3. 应用数据库迁移(首次运行时需要): docker compose exec api alembic upgrade head **可用服务:** * **API 服务器:** `http://localhost:8000` * **交互式 API 文档 (Swagger UI):** `http://localhost:8000/docs` ## 环境配置 设置您的 `.env` 文件来自定义部署。默认值请参见 `.env.example`。 | 变量 | 描述 | 默认值 | |----------|-------------|---------| | `DATABASE_URL` | PostgreSQL 连接字符串 | `postgresql://...` | | `CELERY_BROKER_URL` | Redis 连接字符串 | `redis://...` | | `API_KEY` | 保护 API 端点的密钥(可选) | `None` | | `BLOCK_PRIVATE_TARGETS` | 启用针对内部 IP 的 SSRF 防护 | `True` | | `CORS_ORIGINS` | 允许的 CORS 来源(JSON 数组字符串) | `["http://localhost:5173", ...]` | ## 📖 API 参考 ### 1. 创建新扫描 `POST /api/v1/scans/` ``` { "target": "https://example.com", "options": { "ssl_scan": true, "headers_scan": true, "port_scan": true, "tech_scan": true, "port_list": null } } ``` *返回 `202 Accepted` 和一个 `scan_id`。* ### 2. 检查扫描状态 `GET /api/v1/scans/{scan_id}` *轮询此端点以检索实时状态(`PENDING`、`RUNNING`、`COMPLETED`、`FAILED`)和最终的结构化发现。* ### 3. 下载 PDF 报告 `GET /api/v1/reports/{scan_id}/pdf` *为 `COMPLETED` 状态的扫描返回最终的 PDF 报告。* ## 安全理念与免责声明 VulnLens 以防务工程思维构建: * **授权优先:** 仅扫描您拥有或获得明确授权进行评估的系统。 * **SSRF 防护:** 默认情况下,VulnLens 拒绝解析到内部或私有 IP 范围的目标,以防止滥用扫描基础设施。 * **非破坏性:** 扫描使用标准网络请求和客户端库,不执行 shell 命令或投放负载。 * **无子进程:** 仅使用 Python 原生的 `socket`、`ssl` 和 `httpx` 模块,消除了操作系统级别的命令注入风险。 ## 路线图 - [ ] 添加子域名枚举模块。 - [ ] 为工作者节点实现 DNS 重绑定防护。 - [ ] 将前端打包到多阶段 Docker 容器中,实现一体化部署。 - [ ] 添加 Webhook 支持,以便在扫描完成时通知客户端。 - [ ] 支持为每次扫描自定义 HTTP User-Agent。 ## 📄 许可证 本项目采用 MIT 许可证 - 详情请参见 [LICENSE](LICENSE) 文件。
标签:API开发, C++17, Celery任务队列, FastAPI应用, HTTP头分析, PDF报告生成, PostgreSQL数据库, Python安全工具, React前端, Redis缓存, SSL/TLS扫描, 企业级安全, 安全仪表板, 异步架构, 搜索引擎查询, 数据统计, 测试用例, 端口扫描, 网站安全扫描, 网络安全, 自动化安全审计, 自动化攻击, 逆向工具, 隐私保护