travondatrack/scanvul-Platform
GitHub: travondatrack/scanvul-Platform
一款集成传统扫描引擎与 AI 分析的 Web 端源代码漏洞检测平台,帮助团队自动化发现安全缺陷并获取修复建议。
Stars: 1 | Forks: 0
# ScanVul AI
ScanVul AI 是一个用于创建项目、触发安全扫描以及审查漏洞发现结果的 Web 平台。
当前项目分为以下几个部分:
- `apps/web`:Next.js 15 仪表板、身份验证、项目、扫描、报告
- `apps/api`:FastAPI 扫描器 API 及后台扫描执行
- `docker-compose.yml`:可选的 full stack 服务
## 主要功能
- 通过 NextAuth 进行邮箱/密码身份验证,并通过 OTP 邮件进行验证
- Google OAuth 登录,并包含已验证的 Google 邮箱检查
- 针对 GitHub 仓库的项目管理
- 针对每个项目进行手动扫描触发
- 扫描历史和报告详情页面
- 包含严重程度、证据、修复建议和状态操作的发现结果面板
- 支持 repo URL、压缩包或粘贴的源代码作为输入的扫描器 API
- 已认证仪表板内的浅色/深色主题
- 公开的登录/注册页面固定为浅色模式
## 技术栈
前端:
- Next.js 15
- React 19
- Tailwind CSS
- NextAuth
- Prisma Client
后端:
- FastAPI
- SQLAlchemy
- 支持 Celery/Redis
- Semgrep、Bandit、secret 扫描、AI 审查器适配器
- 本地存储或与 MinIO 兼容的 object storage
## 项目结构
```
apps/
web/ Next.js app, auth, dashboard, Prisma schema
api/ FastAPI app, scanner engines, worker tasks
docker-compose.yml
.env.example
```
## 环境变量
复制示例文件并根据您的机器编辑相关值:
```
Copy-Item .env.example .env
```
重要提示:
- `apps/web/prisma/schema.prisma` 当前使用 `provider = "mysql"`。
- 在使用 Prisma 运行 Web 应用时,请将 `DATABASE_URL` 设置为兼容 MySQL 的 URL。对于当前的 Aiven 设置,请使用 `mysql://avnadmin:@mysql-3ad09837-vlogsnqt720-e2a0.h.aivencloud.com:23011/defaultdb?ssl-mode=REQUIRED`。
- FastAPI API 可以使用 SQLite 进行本地扫描器开发,但 Next.js 仪表板的身份验证/项目表使用的是 Prisma。
- 仅当您希望启用 AI 分类时,才需要设置 `LLM_API_KEY`。
- 将 `NEXTAUTH_URL` 设置为 Web 源,并生成一个高强度的 `NEXTAUTH_SECRET`。
- 配置 `SMTP_HOST`、`SMTP_PORT`、`SMTP_USER`、`SMTP_PASS` 和 `SMTP_FROM`,以便在注册时可以发送 OTP 邮件。
- 仅当设置了 `GOOGLE_CLIENT_ID` 和 `GOOGLE_CLIENT_SECRET` 时,才会启用 Google 登录。
Google Cloud OAuth 回调 URL:
- 本地:`http://localhost:3000/api/auth/callback/google`
- 生产环境:`https://YOUR_DOMAIN/api/auth/callback/google`
身份验证流程:
1. 用户使用邮箱/密码进行注册。
2. 应用会对密码进行哈希处理,创建一个 `emailVerified = null` 的活跃用户,生成一个经过哈希处理的 6 位 OTP,并通过 SMTP 发送该 OTP。
3. 用户在注册页面上提交 OTP。有效的 OTP 会设置 `emailVerified` 并消耗掉该 OTP。
4. UI 使用凭证登录并重定向到 `/projects`。
OTP 验证码在 10 分钟后过期,仅以哈希形式存储,并且在连续 5 次错误尝试后会被拒绝。
## 本地开发
安装并准备 Web 应用:
```
cd apps/web
npm install
npx prisma generate
npx prisma db push
npm run dev
```
PowerShell 本地设置示例:
```
Copy-Item .env.example .env
# 编辑 .env:设置 Aiven DATABASE_URL、NEXTAUTH_SECRET、SMTP_*,以及可选的 GOOGLE_*。
cd apps/web
npm install
npx prisma generate
npx prisma db push
npm run dev
```
在另一个终端中启动 API:
```
cd apps/api
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
打开:
- Web:http://localhost:3000
- API 文档:http://localhost:8000/docs
## 实用命令
前端类型检查:
```
cd apps/web
npx tsc --noEmit --pretty false
```
前端测试:
```
cd apps/web
npm test -- --runInBand
```
前端构建:
```
cd apps/web
npm run build
```
API 冒烟测试:
```
cd apps/api
python -m pytest
```
## Docker
compose 文件会启动 web、API、worker、Redis、MinIO 以及一个数据库服务。
```
docker compose up --build
```
在使用 Docker 进行完整运行之前,请确保 `.env` 数据库设置与 `apps/web/prisma/schema.prisma` 使用的 Prisma provider 匹配。
## 当前注意事项
- 构建可能需要网络访问权限,因为 `apps/web/app/layout.tsx` 通过 `next/font` 导入了 Google `Geist` 字体。
- 仪表板主题切换仅在登录后才有效。
- 登录和注册页面被特意强制设置为浅色模式。
标签:AI代码审计, AV绕过, FastAPI, 搜索引擎查询, 源代码扫描, 自动化攻击, 请求拦截, 逆向工具, 静态应用安全测试