diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7f73157..a42179f 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -180,11 +180,8 @@ jobs:
echo "" >> CHANGELOG.md
echo "### 快速部署" >> CHANGELOG.md
echo "\`\`\`bash" >> CHANGELOG.md
- echo "# 基础部署" >> CHANGELOG.md
+ echo "# 部署" >> CHANGELOG.md
echo "docker compose up -d" >> CHANGELOG.md
- echo "" >> CHANGELOG.md
- echo "# Agent 模式部署(包含 Milvus 向量数据库)" >> CHANGELOG.md
- echo "docker compose --profile agent up -d" >> CHANGELOG.md
echo "\`\`\`" >> CHANGELOG.md
# 12. 创建 GitHub Release
diff --git a/.gitignore b/.gitignore
index 3a78edf..b009785 100644
--- a/.gitignore
+++ b/.gitignore
@@ -184,9 +184,6 @@ trufflehog_results.json
ttt/
examples/
-# Milvus data
-milvus_data/
-
# ChromaDB data
chroma/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 19923f3..8c5384c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
#### RAG Knowledge Base
- Code semantic understanding with Tree-sitter AST-based chunking
- CWE/CVE vulnerability knowledge base integration
-- Milvus/ChromaDB vector database support
+- ChromaDB vector database support
- Multi-language support: Python, JavaScript, TypeScript, Java, Go, PHP, Rust
#### Security Sandbox
diff --git a/README.md b/README.md
index 5d3df89..2e566d2 100644
--- a/README.md
+++ b/README.md
@@ -1,250 +1,499 @@
-# DeepAudit - AI 驱动的智能代码安全审计平台 🛡️
-
-
-

-
-
-[](https://github.com/lintsinghua/DeepAudit/releases)
-[](https://opensource.org/licenses/MIT)
-[](https://reactjs.org/)
-[](https://www.typescriptlang.org/)
-[](https://fastapi.tiangolo.com/)
-[](https://www.python.org/)
+# DeepAudit
+
+### **AI-Powered Intelligent Code Security Audit Platform**
+
+*让安全审计像呼吸一样简单*
+
+
+
+

+
+
+
+[](https://github.com/lintsinghua/DeepAudit/releases)
+[](https://opensource.org/licenses/MIT)
+[](https://reactjs.org/)
+[](https://fastapi.tiangolo.com/)
+[](https://www.python.org/)
+[](https://www.typescriptlang.org/)
+
+
+
+[](https://github.com/lintsinghua/DeepAudit/stargazers)
+[](https://github.com/lintsinghua/DeepAudit/network/members)
+[](https://github.com/lintsinghua/DeepAudit/issues)
[](https://deepwiki.com/lintsinghua/DeepAudit)
-[](https://github.com/lintsinghua/DeepAudit/stargazers)
-[](https://github.com/lintsinghua/DeepAudit/network/members)
+
+
+[🚀 快速开始](#-快速开始) •
+[✨ 核心功能](#-核心功能) •
+[🤖 Agent 审计](#-multi-agent-智能审计) •
+[📚 文档](#-文档) •
+[🤝 贡献](#-贡献)
+
+
+
+
-## 🚀 v3.0.0 新特性
-
-**DeepAudit v3.0.0** 带来了革命性的 **Multi-Agent 智能审计系统**:
-
-- 🤖 **Multi-Agent 架构** — Orchestrator 编排决策,Analysis/Recon/Verification 多智能体协作
-- 🧠 **RAG 知识库增强** — 代码语义理解 + CWE/CVE 漏洞知识库,精准识别安全风险
-- 🔒 **沙箱漏洞验证** — Docker 安全容器自动执行 PoC,验证漏洞真实有效性
-- 🛠️ **专业安全工具集成** — Semgrep、Bandit、Gitleaks、TruffleHog、OSV-Scanner
-
---
-## 💡 这是什么?
-
-**你是否也有这样的困扰?**
-
-- 😫 人工审计的无力:哪怕我不吃不睡,也追不上代码迭代的速度
-- 🤯 传统工具的噪音:每天都在清理误报,感觉自己像个垃圾分类员
-- 😰 代码隐私的风险:想用 AI 却不敢"裸奔",生怕源码泄露给云端
-- 🥺 外包项目的隐患:不知道里面藏了多少雷,却不得不签字验收
-
-**DeepAudit 来拯救你!** 🦸♂️
-
-- 全自动智能审计:AI 驱动的 Multi-Agent 系统自主编排审计策略
-- 上下文精准理解:RAG 增强的代码语义理解,大大降低误报率
-- 沙箱验证漏洞:自动生成 PoC 并在隔离环境验证,确保漏洞真实有效
-- 支持本地私有部署:支持 Ollama 本地模型,代码数据可以不出内网
-
-## 🎬 眼见为实:
-
-| 智能仪表盘 | 即时分析 |
-|:---:|:---:|
-|  |  |
-| *一眼掌握项目安全态势* | *粘贴代码/上传文件,秒出结果* |
-
-| Agent 审计 | 审计报告 |
-|:---:|:---:|
-|
|
|
-| *Multi-Agent 深度安全分析* | *专业报告,一键导出* |
-
-| 审计规则管理 | 提示词模板管理 |
-|:---:|:---:|
-|  |  |
-| *内置 OWASP Top 10,支持自定义规则* | *提示词可视化管理,支持在线测试* |
-
-## ✨ 为什么选择我们?
+## 🎉 v3.0.0 新特性
-|
-
-### 🤖 Multi-Agent 智能协作
-- **Orchestrator Agent**: 统筹编排,自主决策审计策略
-- **Recon Agent**: 信息收集,识别技术栈和入口点
-- **Analysis Agent**: 深度分析,挖掘潜在安全漏洞
-- **Verification Agent**: 沙箱验证,确认漏洞真实有效
-
-### 🧠 RAG 知识库增强
-- 代码语义理解,不只是关键词匹配
-- CWE/CVE 漏洞知识库集成
-- 精准漏洞识别,大幅降低误报
-
-### 🎯 What-Why-How 三步修复
-- **What**: 精准定位问题所在
-- **Why**: 解释为什么这是个问题
-- **How**: 给出可直接使用的修复建议
-
+ |
+🤖 Multi-Agent
+Orchestrator 编排决策 多智能体自主协作
|
-
-
-### 🔒 沙箱安全验证
-- Docker 隔离容器执行 PoC
-- 资源限制 + 网络隔离 + seccomp 策略
-- 自动验证漏洞可利用性
-
-### 🛠️ 专业安全工具集成
-- **Semgrep**: 多语言静态分析
-- **Bandit**: Python 安全扫描
-- **Gitleaks/TruffleHog**: 密钥泄露检测
-- **OSV-Scanner**: 依赖漏洞扫描
-
-### 🔌 10+ LLM 平台任你选
-OpenAI、Claude、Gemini、通义千问、DeepSeek、智谱AI...
-还支持 Ollama 本地私有化部署!
-
+ |
+🧠 RAG 增强
+代码语义理解 CWE/CVE 知识库检索
+ |
+
+🔒 沙箱验证
+Docker 安全容器 自动 PoC 验证
+ |
+
+🛠️ 工具集成
+Semgrep • Bandit Gitleaks • OSV-Scanner
|
+---
+
+## 💡 为什么需要 DeepAudit?
+
+> **你是否也有这样的困扰?**
+
+| 😫 痛点 | 💡 DeepAudit 解决方案 |
+|---------|----------------------|
+| 人工审计跟不上代码迭代速度 | **Multi-Agent 自主审计**,AI 自动编排审计策略 |
+| 传统工具误报率高,每天都在清理噪音 | **RAG 知识库增强**,代码语义理解大幅降低误报 |
+| 担心源码泄露给云端 AI | **支持 Ollama 本地部署**,代码数据不出内网 |
+| 外包项目不知道藏了多少雷 | **沙箱 PoC 验证**,确认漏洞真实可利用 |
+
+---
+
+## 📸 界面预览
+
+
+
+### 🤖 Agent 审计入口
+
+
.png)
+
+*首页快速进入 Multi-Agent 深度审计*
+
+
+
+
+
+
+📋 审计流日志
+
+实时查看 Agent 思考与执行过程
+ |
+
+🎛️ 智能仪表盘
+
+一眼掌握项目安全态势
+ |
+
+
+
+⚡ 即时分析
+
+粘贴代码 / 上传文件,秒出结果
+ |
+
+🗂️ 项目管理
+
+GitHub/GitLab 导入,多项目协同管理
+ |
+
+
+
+
+
+### 📊 专业报告
+
+

+
+*一键导出 PDF / Markdown / JSON*(图中为快速模式,非Agent模式报告)
+
+👉 [查看Agent审计完整报告示例](docs/audit_report_智能漏洞挖掘审计%20-%20完整示例_2025-12-15.html)
+
+
+
+---
+
## 🚀 快速开始
-### Docker Compose 一键部署(推荐)
+### 📦 Docker Compose 一键部署(推荐)
```bash
# 1️⃣ 克隆项目
git clone https://github.com/lintsinghua/DeepAudit.git && cd DeepAudit
-# 2️⃣ 配置你的 LLM API Key
+# 2️⃣ 配置 LLM API Key
cp backend/env.example backend/.env
# 编辑 backend/.env,填入你的 API Key
-# 3️⃣ 一键启动!
+# 3️⃣ 构建沙箱镜像(Agent 漏洞验证必须)
+cd docker/sandbox && chmod +x build.sh && ./build.sh && cd ../..
+
+# 4️⃣ 启动所有服务
docker compose up -d
```
-🎉 **搞定!** 打开 http://localhost:3000 开始体验吧!
+🎉 **完成!** 访问 **http://localhost:3000** 开始体验(包含 Multi-Agent 审计能力)
-### Agent 审计模式部署(可选)
+### 🔑 演示账户
-如需使用 Multi-Agent 深度审计功能:
+| 📧 邮箱 | 🔑 密码 |
+|--------|---------|
+| `demo@example.com` | `demo123` |
-```bash
-# 启动包含 Milvus 向量数据库的完整服务
-docker compose --profile agent up -d
+> ⚠️ **生产环境请务必删除演示账户或修改密码!**
-# 构建安全沙箱镜像(用于漏洞验证)
-cd docker/sandbox && ./build.sh
-```
+
+📖 更多部署方式(本地开发、生产环境配置)
-### 演示账户
+查看 **[部署指南](docs/DEPLOYMENT.md)** 了解:
+- 本地开发环境搭建
+- 生产环境配置
+- HTTPS 配置
+- 反向代理设置
+- 环境变量详解
-系统内置演示账户,包含示例项目和审计数据:
+
-- 📧 邮箱:`demo@example.com`
-- 🔑 密码:`demo123`
+---
-> ⚠️ **生产环境请删除演示账户或修改密码!**
+## ✨ 核心功能
-> 📖 更多部署方式请查看 [部署指南](docs/DEPLOYMENT.md)
+
+
+|
-## ✨ 核心能力
+### 🤖 Multi-Agent 智能审计
-| 功能 | 说明 |
+自主编排、深度分析、自动验证
+
+- **Orchestrator Agent** — 统筹编排,制定审计策略
+- **Recon Agent** — 信息收集,识别技术栈和入口点
+- **Analysis Agent** — 深度分析,挖掘潜在安全漏洞
+- **Verification Agent** — 沙箱验证,确认漏洞有效性
+
+### 🧠 RAG 知识库增强
+
+超越简单关键词匹配
+
+- Tree-sitter AST 智能代码分块
+- ChromaDB 向量数据库
+- CWE / CVE 漏洞知识库集成
+- 多语言支持:Python, JS, TS, Java, Go, PHP, Rust
+
+### 🔒 安全沙箱验证
+
+Docker 隔离环境执行 PoC
+
+- 资源限制(CPU / Memory)
+- 网络隔离
+- seccomp 安全策略
+- 自动生成并执行 PoC 代码
+
+ |
+
+
+### 🛠️ 专业安全工具集成
+
+| 工具 | 功能 |
|------|------|
-| 🤖 **Agent 审计** | Multi-Agent 架构,Orchestrator 自主编排决策,深度漏洞挖掘 |
-| 🧠 **RAG 增强** | 代码语义理解,CWE/CVE 知识库检索,精准漏洞识别 |
-| 🔒 **沙箱验证** | Docker 安全容器执行 PoC,自动验证漏洞有效性 |
-| 🗂️ **项目管理** | GitHub/GitLab 一键导入,ZIP 上传,支持 10+ 编程语言 |
-| ⚡ **即时分析** | 代码片段秒级分析,粘贴即用,无需创建项目 |
-| 🔍 **智能审计** | Bug、安全、性能、风格、可维护性五维检测 |
-| 💡 **可解释分析** | What-Why-How 模式,精准定位 + 修复建议 |
-| 📋 **审计规则** | 内置 OWASP Top 10、代码质量、性能优化规则集 |
-| 📝 **提示词模板** | 可视化管理审计提示词,支持中英文双语 |
-| 📊 **可视化报告** | 质量仪表盘、趋势分析、PDF/JSON 一键导出 |
-| ⚙️ **灵活配置** | 浏览器运行时配置 LLM,无需重启服务 |
+| Semgrep | 多语言静态分析 |
+| Bandit | Python 安全扫描 |
+| Gitleaks | 密钥泄露检测 |
+| TruffleHog | 深度密钥扫描 |
+| OSV-Scanner | 依赖漏洞扫描 |
+| npm audit | Node.js 依赖审计 |
+| Safety | Python 依赖审计 |
-## 🤖 支持的 LLM 平台
+### 🎯 What-Why-How 三步修复
-| 类型 | 平台 |
-|------|------|
-| 🌍 **国际平台** | OpenAI GPT · Claude · Gemini · DeepSeek |
-| 🇨🇳 **国内平台** | 通义千问 · 智谱AI · Kimi · 文心一言 · MiniMax · 豆包 |
-| 🏠 **本地部署** | Ollama (Llama3, CodeLlama, Qwen2.5, DeepSeek-Coder...) |
+- **What** — 精准定位问题所在
+- **Why** — 解释为什么这是个问题
+- **How** — 给出可直接使用的修复建议
-> 💡 支持 API 中转站,解决网络访问问题
+### 📊 可视化报告
-详细配置请查看 [LLM 平台支持](docs/LLM_PROVIDERS.md)
+- 智能安全评分
+- 漏洞趋势分析
+- 一键导出 PDF / JSON
-## 🎯 未来蓝图
+ |
+
+
-### ✅ 已完成
+---
-- ✅ **RAG 知识库** — 代码语义理解 + CWE/CVE 漏洞知识库集成
-- ✅ **多 Agent 协作** — Orchestrator/Analysis/Recon/Verification 多智能体架构
-- ✅ **沙箱验证** — Docker 安全容器自动执行 PoC 验证
+## 🤖 Multi-Agent 智能审计
+
+### 架构概览
+
+
+

+
+
+### 支持的漏洞类型
+
+
+
+|
+
+| 漏洞类型 | 描述 |
+|---------|------|
+| `sql_injection` | SQL 注入 |
+| `xss` | 跨站脚本攻击 |
+| `command_injection` | 命令注入 |
+| `path_traversal` | 路径遍历 |
+| `ssrf` | 服务端请求伪造 |
+| `xxe` | XML 外部实体注入 |
+
+ |
+
+
+| 漏洞类型 | 描述 |
+|---------|------|
+| `insecure_deserialization` | 不安全反序列化 |
+| `hardcoded_secret` | 硬编码密钥 |
+| `weak_crypto` | 弱加密算法 |
+| `authentication_bypass` | 认证绕过 |
+| `authorization_bypass` | 授权绕过 |
+| `idor` | 不安全直接对象引用 |
+
+ |
+
+
+
+> 📖 详细文档请查看 **[Agent 审计指南](docs/AGENT_AUDIT.md)**
+
+---
+
+## 🔌 支持的 LLM 平台
+
+
+
+
+🌍 国际平台
+
+OpenAI GPT-4o / GPT-4
+Claude 3.5 Sonnet / Opus
+Google Gemini Pro
+DeepSeek V3
+
+ |
+
+🇨🇳 国内平台
+
+通义千问 Qwen
+智谱 GLM-4
+Moonshot Kimi
+文心一言 · MiniMax · 豆包
+
+ |
+
+🏠 本地部署
+
+Ollama
+Llama3 · Qwen2.5 · CodeLlama
+DeepSeek-Coder · Codestral
+代码不出内网
+
+ |
+
+
+
+> 💡 支持 API 中转站,解决网络访问问题 | 详细配置 → [LLM 平台支持](docs/LLM_PROVIDERS.md)
+
+---
+
+## 🎯 功能矩阵
+
+| 功能 | 说明 | 模式 |
+|------|------|------|
+| 🤖 **Agent 深度审计** | Multi-Agent 协作,自主编排审计策略 | Agent |
+| 🧠 **RAG 知识增强** | 代码语义理解,CWE/CVE 知识库检索 | Agent |
+| 🔒 **沙箱 PoC 验证** | Docker 隔离执行,验证漏洞有效性 | Agent |
+| 🗂️ **项目管理** | GitHub/GitLab 导入,ZIP 上传,10+ 语言支持 | 通用 |
+| ⚡ **即时分析** | 代码片段秒级分析,粘贴即用 | 通用 |
+| 🔍 **五维检测** | Bug · 安全 · 性能 · 风格 · 可维护性 | 通用 |
+| 💡 **What-Why-How** | 精准定位 + 原因解释 + 修复建议 | 通用 |
+| 📋 **审计规则** | 内置 OWASP Top 10,支持自定义规则集 | 通用 |
+| 📝 **提示词模板** | 可视化管理,支持中英文双语 | 通用 |
+| 📊 **报告导出** | PDF / Markdown / JSON 一键导出 | 通用 |
+| ⚙️ **运行时配置** | 浏览器配置 LLM,无需重启服务 | 通用 |
+
+---
+
+## 🗺️ 未来蓝图
+
+### ✅ 已完成 (v3.0.0)
+
+- [x] Multi-Agent 协作架构(Orchestrator/Recon/Analysis/Verification)
+- [x] RAG 知识库(代码语义 + CWE/CVE)
+- [x] Docker 沙箱 PoC 验证
+- [x] 专业安全工具集成
### 🚧 开发中
-- 🔄 **CI/CD 集成** — GitHub/GitLab 流水线自动审计,PR 批量扫描
-- 🔄 **自动生成补丁** — 基于漏洞分析自动生成修复代码
-- 🔄 **跨文件分析** — 代码知识图谱,理解模块间调用关系
+- [ ] **CI/CD 集成** — GitHub Actions / GitLab CI 流水线自动审计
+- [ ] **自动补丁生成** — 基于漏洞分析自动生成修复代码
+- [ ] **跨文件分析** — 代码知识图谱,理解模块间调用关系
### 📋 计划中
-- 📋 **混合分析** — AI 分析 + 传统 SAST 工具验证,减少误报漏报
-- 📋 **多仓库支持** — Gitea、Bitbucket 等更多平台支持
+- [ ] **混合分析** — AI + 传统 SAST 联合验证,减少误报漏报
+- [ ] **IDE 插件** — VS Code / JetBrains 集成
+- [ ] **多仓库支持** — Gitea, Bitbucket, GitLab Self-hosted
-💡 **您的 Star 和反馈是我们前进的最大动力!有任何想法欢迎提 Issue 一起讨论~**
+---
## 📚 文档
| 文档 | 说明 |
|------|------|
-| [部署指南](docs/DEPLOYMENT.md) | Docker 部署 / 本地开发环境搭建 |
-| [Agent 审计](docs/AGENT_AUDIT.md) | Multi-Agent 审计模块详解 |
-| [配置说明](docs/CONFIGURATION.md) | 后端配置、审计规则、提示词模板 |
-| [LLM 平台支持](docs/LLM_PROVIDERS.md) | 各家 LLM 的配置方法和 API Key 获取 |
-| [安全工具设置](docs/SECURITY_TOOLS_SETUP.md) | 安全扫描工具本地安装指南 |
-| [常见问题](docs/FAQ.md) | 遇到问题先看这里 |
-| [更新日志](CHANGELOG.md) | 版本更新记录 |
-| [贡献指南](CONTRIBUTING.md) | 想参与开发?看这个 |
-| [安全政策](SECURITY.md) / [免责声明](DISCLAIMER.md) | 使用前建议读一下 |
+| 📘 [部署指南](docs/DEPLOYMENT.md) | Docker 部署、本地开发、生产配置 |
+| 🤖 [Agent 审计](docs/AGENT_AUDIT.md) | Multi-Agent 模块详解 |
+| ⚙️ [配置说明](docs/CONFIGURATION.md) | 后端配置、审计规则、提示词模板 |
+| 🔌 [LLM 平台](docs/LLM_PROVIDERS.md) | 各家 LLM 配置方法和 API Key 获取 |
+| 🛠️ [安全工具](docs/SECURITY_TOOLS_SETUP.md) | 安全扫描工具本地安装指南 |
+| ❓ [常见问题](docs/FAQ.md) | 遇到问题先看这里 |
+| 📜 [更新日志](CHANGELOG.md) | 版本更新记录 |
+| 👥 [贡献指南](CONTRIBUTING.md) | 参与开发 |
+
+---
+
+## 🏗️ 技术栈
+
+
+
+|
+
+### 🖥️ 前端
+- **React 18** + TypeScript 5.7
+- **Vite** 构建工具
+- **TailwindCSS** + 自定义 Cyberpunk 主题
+- **Zustand** 状态管理
+- **React Query** 数据获取
+
+ |
+
+
+### ⚙️ 后端
+- **FastAPI** + Python 3.13
+- **PostgreSQL** 数据存储
+- **ChromaDB** 向量数据库
+- **Docker** 沙箱容器
+- **SSE** 实时事件流
+
+ |
+
+
+
+---
## 🤝 贡献
-开源项目离不开社区的支持!无论是提 Issue、贡献代码,还是分享使用心得,都非常欢迎。
+开源项目离不开社区的支持!无论是提 Issue、PR,还是分享使用心得,都非常欢迎 🙌
-> 有想和我一起让工具变得更好的佬友们,欢迎联系我,和我一起为开源做一点贡献
+
+
+
-**感谢每一位贡献者!**
+> 💬 想和我一起让工具变得更好?欢迎联系我,一起为开源做贡献!
-[](https://github.com/lintsinghua/DeepAudit/graphs/contributors)
+---
+
+## 🙏 致谢
+
+DeepAudit 的诞生离不开以下优秀开源项目的支持与启发,在此表示衷心感谢!
+
+### 🏗️ 架构参考
+
+| 项目 | 说明 | License |
+|------|------|---------|
+| [**Strix**](https://github.com/AiGptCode/Strix) | Multi-Agent 安全审计架构参考,提供了 Agent 协作编排的优秀设计思路 | MIT |
+
+### 🔧 集成工具
+
+| 项目 | 说明 | License |
+|------|------|---------|
+| [**Kunlun-M (昆仑镜)**](https://github.com/LoRexxar/Kunlun-M) | PHP/JS 静态代码安全审计工具,集成为 Agent 分析工具之一 | MIT |
+| [**Semgrep**](https://github.com/semgrep/semgrep) | 多语言静态分析引擎,支持自定义规则 | LGPL-2.1 |
+| [**Bandit**](https://github.com/PyCQA/bandit) | Python 安全漏洞扫描工具 | Apache-2.0 |
+| [**Gitleaks**](https://github.com/gitleaks/gitleaks) | Git 仓库密钥泄露检测工具 | MIT |
+| [**TruffleHog**](https://github.com/trufflesecurity/trufflehog) | 深度密钥和凭证扫描器 | AGPL-3.0 |
+| [**OSV-Scanner**](https://github.com/google/osv-scanner) | Google 开源的依赖漏洞扫描器 | Apache-2.0 |
+
+### 🧠 核心依赖
+
+| 项目 | 说明 | License |
+|------|------|---------|
+| [**LangChain**](https://github.com/langchain-ai/langchain) | LLM 应用开发框架 | MIT |
+| [**LangGraph**](https://github.com/langchain-ai/langgraph) | Agent 状态图工作流引擎 | MIT |
+| [**LiteLLM**](https://github.com/BerriAI/litellm) | 统一多 LLM 平台调用接口 | MIT |
+| [**ChromaDB**](https://github.com/chroma-core/chroma) | 轻量级向量数据库 | Apache-2.0 |
+| [**Tree-sitter**](https://github.com/tree-sitter/tree-sitter) | 增量解析库,用于代码 AST 分析 | MIT |
+| [**FastAPI**](https://github.com/fastapi/fastapi) | 高性能 Python Web 框架 | MIT |
+| [**React**](https://github.com/facebook/react) | 用户界面构建库 | MIT |
+
+> 💡 感谢所有开源贡献者的无私奉献,让我们能站在巨人的肩膀上构建更好的工具!
+
+---
## 📞 联系我们
-- **项目链接**: [https://github.com/lintsinghua/DeepAudit](https://github.com/lintsinghua/DeepAudit)
-- **问题反馈**: [Issues](https://github.com/lintsinghua/DeepAudit/issues)
-- **作者邮箱**: lintsinghua@qq.com
+
---
-
- ⭐ 如果这个项目对你有帮助,请给我们一个 Star!
-
- 你的支持是我们持续迭代的最大动力 💪
-
+
-## 📈 项目统计
+## ⭐ 如果这个项目对你有帮助,请给我们一个 Star!
-[](https://www.star-history.com/#lintsinghua/DeepAudit&type=date&legend=top-left)
+**你的支持是我们持续迭代的最大动力 💪**
+
+
+
+[](https://star-history.com/#lintsinghua/DeepAudit&Date)
+
+
---
-
- ⚠️ 使用前请阅读 安全政策 和 免责声明
-
+⚠️ 使用前请阅读 [安全政策](SECURITY.md) 和 [免责声明](DISCLAIMER.md)
-
- Made with ❤️ by lintsinghua
-
+
+
+**Made with ❤️ by [lintsinghua](https://github.com/lintsinghua)**
+
+
diff --git a/backend/.dockerignore b/backend/.dockerignore
index bdd4ee5..a215ea6 100644
--- a/backend/.dockerignore
+++ b/backend/.dockerignore
@@ -3,7 +3,6 @@ __pycache__
*.pyc
.git
.gitignore
-*.md
.env
.vscode
.DS_Store
diff --git a/backend/Dockerfile b/backend/Dockerfile
index 7e6c02a..f2bae6e 100644
--- a/backend/Dockerfile
+++ b/backend/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.13-slim
+FROM python:3.12-slim
WORKDIR /app
@@ -10,15 +10,17 @@ ENV https_proxy=
ENV HTTP_PROXY=
ENV HTTPS_PROXY=
+# 配置 apt 重试机制以处理网络不稳定
+RUN echo 'Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries
+
# 安装系统依赖(包含 WeasyPrint 所需的库和中文字体支持)
RUN rm -f /etc/apt/apt.conf.d/proxy.conf 2>/dev/null || true && \
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY && \
apt-get update && \
- apt-get install -y --no-install-recommends \
+ apt-get install -y --no-install-recommends --fix-missing \
gcc \
libpq-dev \
curl \
- # WeasyPrint 完整依赖
libpango-1.0-0 \
libpangoft2-1.0-0 \
libpangocairo-1.0-0 \
@@ -27,7 +29,6 @@ RUN rm -f /etc/apt/apt.conf.d/proxy.conf 2>/dev/null || true && \
libffi-dev \
libglib2.0-0 \
shared-mime-info \
- # 字体支持(中文)
fonts-noto-cjk \
fonts-noto-cjk-extra \
fontconfig \
@@ -37,8 +38,8 @@ RUN rm -f /etc/apt/apt.conf.d/proxy.conf 2>/dev/null || true && \
# 安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
-# 复制依赖文件
-COPY pyproject.toml uv.lock ./
+# 复制依赖文件和 README
+COPY pyproject.toml uv.lock README.md ./
# 使用 uv 安装依赖(确保无代理)
RUN unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY && \
diff --git a/backend/README.md b/backend/README.md
new file mode 100644
index 0000000..21ccf0f
--- /dev/null
+++ b/backend/README.md
@@ -0,0 +1,3 @@
+# DeepAudit Backend
+
+AI-Powered Code Security Audit Platform Backend Service.
diff --git a/backend/app/core/config.py b/backend/app/core/config.py
index b5c5162..4a07275 100644
--- a/backend/app/core/config.py
+++ b/backend/app/core/config.py
@@ -91,8 +91,8 @@ class Settings(BaseSettings):
AGENT_TOKEN_BUDGET: int = 100000 # Agent Token 预算
AGENT_TIMEOUT_SECONDS: int = 1800 # Agent 超时时间(30分钟)
- # 沙箱配置
- SANDBOX_IMAGE: str = "python:3.11-slim" # 沙箱 Docker 镜像
+ # 沙箱配置(必须)
+ SANDBOX_IMAGE: str = "deepaudit/sandbox:latest" # 沙箱 Docker 镜像
SANDBOX_MEMORY_LIMIT: str = "512m" # 沙箱内存限制
SANDBOX_CPU_LIMIT: float = 1.0 # 沙箱 CPU 限制
SANDBOX_TIMEOUT: int = 60 # 沙箱命令超时(秒)
diff --git a/backend/app/main.py b/backend/app/main.py
index 822c417..45c5ca8 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -18,6 +18,37 @@ logging.getLogger("LiteLLM").setLevel(logging.WARNING)
logging.getLogger("litellm").setLevel(logging.WARNING)
+async def check_agent_services():
+ """检查 Agent 必须服务的可用性"""
+ issues = []
+
+ # 检查 Docker/沙箱服务
+ try:
+ import docker
+ client = docker.from_env()
+ client.ping()
+ logger.info(" - Docker 服务可用")
+ except ImportError:
+ issues.append("Docker Python 库未安装 (pip install docker)")
+ except Exception as e:
+ issues.append(f"Docker 服务不可用: {e}")
+
+ # 检查 Redis 连接(可选警告)
+ try:
+ import redis
+ import os
+ redis_url = os.environ.get("REDIS_URL", "redis://localhost:6379/0")
+ r = redis.from_url(redis_url)
+ r.ping()
+ logger.info(" - Redis 服务可用")
+ except ImportError:
+ logger.warning(" - Redis Python 库未安装,部分功能可能受限")
+ except Exception as e:
+ logger.warning(f" - Redis 服务连接失败: {e}")
+
+ return issues
+
+
@asynccontextmanager
async def lifespan(app: FastAPI):
"""
@@ -25,13 +56,13 @@ async def lifespan(app: FastAPI):
启动时初始化数据库(创建默认账户等)
"""
logger.info("DeepAudit 后端服务启动中...")
-
+
# 初始化数据库(创建默认账户)
# 注意:需要先运行 alembic upgrade head 创建表结构
try:
async with AsyncSessionLocal() as db:
await init_db(db)
- logger.info("✓ 数据库初始化完成")
+ logger.info(" - 数据库初始化完成")
except Exception as e:
# 表不存在时静默跳过,等待用户运行数据库迁移
error_msg = str(e)
@@ -39,16 +70,29 @@ async def lifespan(app: FastAPI):
logger.info("数据库表未创建,请先运行: alembic upgrade head")
else:
logger.warning(f"数据库初始化跳过: {e}")
-
+
+ # 检查 Agent 服务
+ logger.info("检查 Agent 核心服务...")
+ issues = await check_agent_services()
+ if issues:
+ logger.warning("=" * 50)
+ logger.warning("Agent 服务检查发现问题:")
+ for issue in issues:
+ logger.warning(f" - {issue}")
+ logger.warning("部分功能可能不可用,请检查配置")
+ logger.warning("=" * 50)
+ else:
+ logger.info(" - Agent 核心服务检查通过")
+
logger.info("=" * 50)
logger.info("DeepAudit 后端服务已启动")
logger.info(f"API 文档: http://localhost:8000/docs")
logger.info("=" * 50)
logger.info("演示账户: demo@example.com / demo123")
logger.info("=" * 50)
-
+
yield
-
+
logger.info("DeepAudit 后端服务已关闭")
diff --git a/backend/env.example b/backend/env.example
index 949f98c..b56f693 100644
--- a/backend/env.example
+++ b/backend/env.example
@@ -106,9 +106,9 @@ LLM_MAX_TOKENS=4096
# OLLAMA_BASE_URL=http://localhost:11434/v1
# =============================================
-# Agent 审计配置 (Multi-Agent v3.0.0 新增)
+# Agent 审计配置 (Multi-Agent v3.0.0 核心必须)
# =============================================
-# Agent 审计开关(开启后可使用 Multi-Agent 深度审计功能)
+# Agent 审计开关(必须开启,是核心功能)
AGENT_ENABLED=true
# Agent 最大迭代次数
@@ -117,6 +117,10 @@ AGENT_MAX_ITERATIONS=5
# Agent 单次审计超时时间(秒)
AGENT_TIMEOUT=1800
+# Redis 配置(Agent 任务队列 - 必须)
+# Docker Compose 部署时使用 redis 作为服务器地址
+REDIS_URL=redis://localhost:6379/0
+
# =============================================
# 嵌入模型配置(RAG 功能,独立于主 LLM)
# =============================================
@@ -137,25 +141,22 @@ EMBEDDING_BASE_URL=
# =============================================
# 向量数据库配置(RAG 功能)
# =============================================
-# 向量数据库类型: milvus, chroma
+# 向量数据库类型: chroma
VECTOR_DB_TYPE=chroma
# ChromaDB 配置(本地模式)
CHROMA_PERSIST_DIRECTORY=./data/chroma
-# Milvus 配置(Agent 模式推荐)
-# Docker Compose --profile agent 启动时使用 milvus 作为 host
-MILVUS_HOST=localhost
-MILVUS_PORT=19530
-
# =============================================
-# 沙箱配置(漏洞验证)
+# 沙箱配置(漏洞验证 - 核心必须)
# =============================================
-# 沙箱功能开关
+# 沙箱功能开关(必须开启,是漏洞验证的核心组件)
SANDBOX_ENABLED=true
-# 沙箱 Docker 镜像(需要提前构建: cd docker/sandbox && ./build.sh)
-SANDBOX_IMAGE=deepaudit-sandbox:latest
+# 沙箱 Docker 镜像
+# 构建方式 1: docker compose build sandbox
+# 构建方式 2: cd docker/sandbox && ./build.sh
+SANDBOX_IMAGE=deepaudit/sandbox:latest
# 沙箱内存限制
SANDBOX_MEMORY_LIMIT=512m
diff --git a/backend/pyproject.toml b/backend/pyproject.toml
index cc93d8a..9bf5c71 100644
--- a/backend/pyproject.toml
+++ b/backend/pyproject.toml
@@ -21,6 +21,7 @@ dependencies = [
"asyncpg>=0.29.0",
"alembic>=1.13.0",
"greenlet>=3.0.0",
+ "redis>=5.0.0",
# ============ Data Validation ============
"pydantic>=2.0.0",
diff --git a/backend/requirements-lock.txt b/backend/requirements-lock.txt
index b3307b9..99ea56d 100644
--- a/backend/requirements-lock.txt
+++ b/backend/requirements-lock.txt
@@ -1,7 +1,7 @@
# This file was autogenerated by uv via the following command:
-# uv pip compile requirements.txt -o requirements-lock.txt --python-version 3.12
+# uv pip compile pyproject.toml -o requirements-lock.txt
aiofiles==25.1.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.13.2
@@ -11,7 +11,7 @@ aiohttp==3.13.2
aiosignal==1.4.0
# via aiohttp
alembic==1.17.2
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
annotated-doc==0.0.4
# via fastapi
annotated-types==0.7.0
@@ -26,7 +26,7 @@ anyio==4.11.0
asgiref==3.11.0
# via django
asyncpg==0.31.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
attrs==25.4.0
# via
# aiohttp
@@ -37,14 +37,14 @@ authlib==1.6.6
backoff==2.2.1
# via posthog
bandit==1.9.2
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
bcrypt==4.3.0
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# chromadb
# passlib
beautifulsoup4==4.14.3
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
boolean-py==5.0
# via license-expression
brotli==1.2.0
@@ -70,7 +70,7 @@ charset-normalizer==3.4.4
# reportlab
# requests
chromadb==1.3.7
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
click==8.3.1
# via
# litellm
@@ -82,7 +82,7 @@ click==8.3.1
coloredlogs==15.0.1
# via onnxruntime
colorlog==6.10.1
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
cryptography==46.0.3
# via
# authlib
@@ -100,11 +100,11 @@ distro==1.9.0
# openai
# posthog
django==6.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
dnspython==2.8.0
# via email-validator
docker==7.1.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
dparse==0.6.4
# via
# safety
@@ -116,11 +116,11 @@ ecdsa==0.19.1
editorconfig==0.17.1
# via jsbeautifier
email-validator==2.3.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
esprima==4.0.1
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
fastapi==0.122.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
fastuuid==0.14.0
# via litellm
filelock==3.20.0
@@ -143,7 +143,7 @@ google-auth==2.43.0
googleapis-common-protos==1.72.0
# via opentelemetry-exporter-otlp-proto-grpc
greenlet==3.3.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
grpcio==1.67.1
# via
# chromadb
@@ -161,7 +161,7 @@ httptools==0.7.1
# via uvicorn
httpx==0.28.1
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# chromadb
# huggingface-hub
# langgraph-sdk
@@ -190,7 +190,7 @@ importlib-resources==6.5.2
# via chromadb
jinja2==3.1.6
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# litellm
# safety
jiter==0.12.0
@@ -198,9 +198,9 @@ jiter==0.12.0
joblib==1.5.2
# via nltk
jsbeautifier==1.15.4
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
json-repair==0.54.2
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
jsonpatch==1.33
# via langchain-core
jsonpointer==3.0.0
@@ -214,11 +214,11 @@ jsonschema-specifications==2025.9.1
kubernetes==34.1.0
# via chromadb
langchain==1.1.3
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
langchain-classic==1.0.0
# via langchain-community
langchain-community==0.4.1
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
langchain-core==1.2.0
# via
# langchain
@@ -230,12 +230,12 @@ langchain-core==1.2.0
# langgraph-checkpoint
# langgraph-prebuilt
langchain-openai==1.1.3
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
langchain-text-splitters==1.1.0
# via langchain-classic
langgraph==1.0.5
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# langchain
langgraph-checkpoint==3.0.1
# via
@@ -253,7 +253,7 @@ langsmith==0.4.59
license-expression==30.4.4
# via cyclonedx-python-lib
litellm==1.80.8
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
mako==1.3.10
# via alembic
markdown-it-py==4.0.0
@@ -340,9 +340,9 @@ packaging==25.0
# safety
# safety-schemas
passlib==1.7.4
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
phply==1.2.6
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
pillow==12.0.0
# via
# reportlab
@@ -352,7 +352,7 @@ pip==25.3
pip-api==0.0.34
# via pip-audit
pip-audit==2.10.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
pip-requirements-parser==32.0.1
# via pip-audit
platformdirs==4.5.1
@@ -360,11 +360,11 @@ platformdirs==4.5.1
ply==3.11
# via phply
portalocker==3.2.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
posthog==5.4.0
# via chromadb
prettytable==3.17.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
propcache==0.4.1
# via
# aiohttp
@@ -389,7 +389,7 @@ pycparser==2.23
# via cffi
pydantic==2.12.4
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# chromadb
# fastapi
# langchain
@@ -406,16 +406,16 @@ pydantic-core==2.41.5
# via pydantic
pydantic-settings==2.12.0
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# langchain-community
pydyf==0.12.1
# via weasyprint
pygments==2.19.2
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# rich
pyjsparser==2.7.1
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
pyparsing==3.2.5
# via pip-requirements-parser
pyphen==0.17.2
@@ -434,9 +434,9 @@ python-dotenv==1.2.1
# pydantic-settings
# uvicorn
python-jose==3.5.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
python-multipart==0.0.20
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
pyyaml==6.0.3
# via
# bandit
@@ -448,7 +448,9 @@ pyyaml==6.0.3
# langchain-core
# uvicorn
rarfile==4.2
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
+redis==7.1.0
+ # via deepaudit-backend (pyproject.toml)
referencing==0.37.0
# via
# jsonschema
@@ -458,7 +460,7 @@ regex==2025.11.3
# nltk
# tiktoken
reportlab==4.4.5
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
requests==2.32.5
# via
# cachecontrol
@@ -498,7 +500,7 @@ ruamel-yaml==0.18.16
ruamel-yaml-clib==0.2.15
# via ruamel-yaml
safety==3.7.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
safety-schemas==0.0.16
# via safety
shellingham==1.5.4
@@ -522,14 +524,14 @@ soupsieve==2.8
# via beautifulsoup4
sqlalchemy==2.0.44
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# alembic
# langchain-classic
# langchain-community
sqlparse==0.5.4
# via django
sse-starlette==3.0.3
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
starlette==0.50.0
# via fastapi
stevedore==5.6.0
@@ -544,7 +546,7 @@ tenacity==9.1.2
# safety
tiktoken==0.12.0
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# langchain-openai
# litellm
tinycss2==1.5.1
@@ -571,10 +573,10 @@ tqdm==4.67.1
# openai
tree-sitter==0.25.2
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# tree-sitter-languages
tree-sitter-languages==1.10.2
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
typer==0.20.0
# via
# chromadb
@@ -625,7 +627,7 @@ uuid-utils==0.12.0
# langsmith
uvicorn==0.38.0
# via
- # -r requirements.txt
+ # deepaudit-backend (pyproject.toml)
# chromadb
uvloop==0.22.1
# via uvicorn
@@ -634,7 +636,7 @@ watchfiles==1.1.1
wcwidth==0.2.14
# via prettytable
weasyprint==67.0
- # via -r requirements.txt
+ # via deepaudit-backend (pyproject.toml)
webencodings==0.5.1
# via
# cssselect2
diff --git a/backend/requirements.txt b/backend/requirements.txt
index a42c7c9..1b18451 100644
--- a/backend/requirements.txt
+++ b/backend/requirements.txt
@@ -1,93 +1,76 @@
+# ============ Web Framework ============
fastapi>=0.100.0
-uvicorn[standard]
+uvicorn[standard]>=0.23.0
+sse-starlette>=1.8.2
+
+# ============ Database ============
sqlalchemy>=2.0.0
-asyncpg
-alembic
+asyncpg>=0.29.0
+alembic>=1.13.0
+greenlet>=3.0.0
+redis>=5.0.0
+
+# ============ Data Validation ============
pydantic>=2.0.0
-pydantic-settings
-passlib[bcrypt]
-python-jose[cryptography]
-python-multipart
-httpx
-email-validator
-greenlet
-bcrypt<5.0.0
+pydantic-settings>=2.0.0
+email-validator>=2.1.0
+
+# ============ Authentication ============
+passlib[bcrypt]>=1.7.4
+python-jose[cryptography]>=3.3.0
+python-multipart>=0.0.6
+bcrypt>=4.0.0,<5.0.0
+
+# ============ HTTP Client ============
+httpx>=0.25.0
+
+# ============ LLM Integration ============
litellm>=1.0.0
+tiktoken>=0.5.2
+
+# ============ Report Generation ============
reportlab>=4.0.0
-weasyprint>=66.0
+weasyprint>=60.0
jinja2>=3.1.6
+
+# ============ Utilities ============
json-repair>=0.30.0
+aiofiles>=23.2.1
-# ============ Agent 模块依赖 ============
-
-# LangChain 核心
+# ============ LangChain & LangGraph ============
langchain>=0.1.0
langchain-community>=0.0.20
langchain-openai>=0.0.5
-
-# LangGraph (状态图工作流)
langgraph>=0.0.40
-# 向量数据库
+# ============ Vector Database ============
chromadb>=0.4.22
-# Token 计算
-tiktoken>=0.5.2
-
-# Docker 沙箱
-docker>=7.0.0
-
-# 异步文件操作
-aiofiles>=23.2.1
-
-# SSE 流
-sse-starlette>=1.8.2
-
-# ============ 代码解析 (高级库) ============
-
-# Tree-sitter AST 解析
+# ============ Code Parsing ============
tree-sitter>=0.21.0
tree-sitter-languages>=1.10.0
-
-# 通用代码解析
pygments>=2.17.0
-# ============ 外部安全工具 (可选安装) ============
-# 这些工具可以通过 pip 安装,或使用系统包管理器
+# ============ Docker Sandbox ============
+docker>=7.0.0
-# Python 安全扫描
+# ============ Security Tools ============
bandit>=1.7.0
safety>=2.3.0
-
-# 静态分析 (需要单独安装 semgrep CLI)
-# pip install semgrep
-
-# 依赖漏洞扫描
pip-audit>=2.6.0
-# ============ Kunlun-M 依赖 (MIT License) ============
+# ============ Kunlun-M Dependencies (MIT License) ============
# https://github.com/LoRexxar/Kunlun-M
-# Kunlun-M 是静态代码安全审计工具,支持 PHP/JS 语义分析
-
-# PHP/JS 解析器
pyjsparser>=2.7.1
phply>=1.2.6
esprima>=4.0.1
jsbeautifier>=1.14.0
-
-# 工具库
colorlog>=6.0.0
portalocker>=2.0.0
prettytable>=3.0.0
rarfile>=4.0
-
-# HTML 解析
beautifulsoup4>=4.12.0
-
-# Django (Kunlun-M 数据库)
django>=4.2.0
-# MySQL 客户端 (可选,用于 Kunlun-M Web 模式)
-# 如需 MySQL 支持,请安装: pip install mysqlclient
-# 注意: mysqlclient 需要系统级 MySQL 开发库
-
+# ============ Optional: MySQL support for Kunlun-M Web mode ============
+# mysqlclient>=2.2.0
diff --git a/backend/scripts/create_agent_demo_data.py b/backend/scripts/create_agent_demo_data.py
new file mode 100644
index 0000000..2df7b25
--- /dev/null
+++ b/backend/scripts/create_agent_demo_data.py
@@ -0,0 +1,1296 @@
+#!/usr/bin/env python3
+"""
+创建 Agent 审计任务演示数据
+用于生成 HTML 报告示例展示
+
+运行方式:
+cd backend && python -m scripts.create_agent_demo_data
+"""
+
+import asyncio
+import json
+import uuid
+import sys
+import os
+from datetime import datetime, timedelta, timezone
+
+# 添加backend目录到路径
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
+from sqlalchemy.orm import sessionmaker
+from sqlalchemy.future import select
+
+from app.core.config import settings
+from app.models.user import User
+from app.models.project import Project
+from app.models.agent_task import (
+ AgentTask, AgentEvent, AgentFinding, AgentTreeNode, AgentCheckpoint,
+ AgentTaskStatus, AgentTaskPhase, AgentEventType,
+ VulnerabilitySeverity, VulnerabilityType, FindingStatus
+)
+
+
+# 演示数据配置
+DEMO_PROJECT_NAME = "VulnWebApp - 安全演示项目"
+DEMO_TASK_NAME = "智能漏洞挖掘审计 - 完整示例"
+
+
+async def get_or_create_demo_project(db: AsyncSession, user_id: str) -> Project:
+ """获取或创建演示项目"""
+ result = await db.execute(
+ select(Project).where(Project.name == DEMO_PROJECT_NAME)
+ )
+ project = result.scalars().first()
+
+ if not project:
+ project = Project(
+ name=DEMO_PROJECT_NAME,
+ description="用于演示 Agent 智能审计功能的示例 Web 应用项目,包含多种常见安全漏洞",
+ source_type="zip",
+ owner_id=user_id,
+ is_active=True,
+ default_branch="main",
+ programming_languages=json.dumps(["Python", "JavaScript", "SQL"]),
+ created_at=datetime.now(timezone.utc) - timedelta(days=7),
+ )
+ db.add(project)
+ await db.flush()
+ print(f"✓ 创建演示项目: {project.name}")
+ else:
+ print(f"演示项目已存在: {project.name}")
+
+ return project
+
+
+async def create_agent_demo_task(db: AsyncSession, project: Project, user_id: str) -> AgentTask:
+ """创建 Agent 审计任务演示数据"""
+
+ # 检查是否已存在
+ result = await db.execute(
+ select(AgentTask).where(AgentTask.name == DEMO_TASK_NAME)
+ )
+ existing = result.scalars().first()
+ if existing:
+ print(f"删除已存在的演示任务: {existing.id}")
+ await db.delete(existing)
+ await db.flush()
+
+ now = datetime.now(timezone.utc)
+ task_start = now - timedelta(minutes=15)
+ task_end = now - timedelta(minutes=2)
+
+ # 创建 Agent 任务
+ task = AgentTask(
+ id=str(uuid.uuid4()),
+ project_id=project.id,
+ created_by=user_id,
+ name=DEMO_TASK_NAME,
+ description="对 VulnWebApp 进行全面的安全漏洞扫描,包括 SQL 注入、XSS、命令注入等常见漏洞类型的检测与验证",
+ task_type="agent_audit",
+
+ # 配置
+ audit_scope={"include": ["**/*.py", "**/*.js", "**/*.html"], "exclude": ["tests/*", "node_modules/*"]},
+ target_vulnerabilities=["sql_injection", "xss", "command_injection", "path_traversal", "ssrf", "hardcoded_secret"],
+ verification_level="sandbox",
+ branch_name="main",
+ exclude_patterns=["*.test.py", "*.spec.js", "__pycache__/*"],
+
+ # LLM 配置
+ llm_config={"provider": "openai", "model": "gpt-4", "temperature": 0.1},
+ agent_config={"max_depth": 3, "enable_verification": True, "enable_poc_generation": True},
+ max_iterations=50,
+ token_budget=100000,
+ timeout_seconds=1800,
+
+ # 状态
+ status=AgentTaskStatus.COMPLETED,
+ current_phase=AgentTaskPhase.REPORTING,
+ current_step="报告生成完成",
+
+ # 进度统计
+ total_files=48,
+ indexed_files=48,
+ analyzed_files=48,
+ total_chunks=156,
+
+ # Agent 统计
+ total_iterations=32,
+ tool_calls_count=87,
+ tokens_used=45680,
+
+ # 发现统计
+ findings_count=8,
+ verified_count=6,
+ false_positive_count=1,
+
+ # 严重程度统计
+ critical_count=2,
+ high_count=3,
+ medium_count=2,
+ low_count=1,
+
+ # 评分
+ quality_score=72.5,
+ security_score=35.8,
+
+ # 审计计划
+ audit_plan={
+ "phases": [
+ {"name": "代码索引", "description": "建立代码向量索引,支持语义检索"},
+ {"name": "入口点识别", "description": "识别用户输入入口点和敏感API"},
+ {"name": "漏洞模式匹配", "description": "基于已知漏洞模式进行检测"},
+ {"name": "数据流分析", "description": "追踪污点数据流,验证漏洞可达性"},
+ {"name": "沙箱验证", "description": "在隔离环境中验证漏洞可利用性"},
+ {"name": "PoC 生成", "description": "为已验证漏洞生成概念验证代码"},
+ ],
+ "focus_areas": ["用户认证模块", "数据库查询接口", "文件上传功能", "API 端点"],
+ },
+
+ # 时间戳
+ created_at=task_start - timedelta(minutes=1),
+ started_at=task_start,
+ completed_at=task_end,
+ )
+
+ db.add(task)
+ await db.flush()
+ print(f"✓ 创建 Agent 任务: {task.id}")
+
+ return task
+
+
+async def create_agent_events(db: AsyncSession, task: AgentTask) -> list:
+ """创建 Agent 事件流"""
+
+ events = []
+ base_time = task.started_at
+ sequence = 0
+
+ def add_event(event_type: str, message: str, phase: str = None,
+ tool_name: str = None, tool_input: dict = None,
+ tool_output: dict = None, tool_duration_ms: int = None,
+ finding_id: str = None, tokens_used: int = 0,
+ metadata: dict = None, time_offset_seconds: int = 0):
+ nonlocal sequence
+ sequence += 1
+ event = AgentEvent(
+ id=str(uuid.uuid4()),
+ task_id=task.id,
+ event_type=event_type,
+ phase=phase,
+ message=message,
+ tool_name=tool_name,
+ tool_input=tool_input,
+ tool_output=tool_output,
+ tool_duration_ms=tool_duration_ms,
+ finding_id=finding_id,
+ tokens_used=tokens_used,
+ event_metadata=metadata,
+ sequence=sequence,
+ created_at=base_time + timedelta(seconds=time_offset_seconds),
+ )
+ events.append(event)
+ return event
+
+ # ========== 任务启动 ==========
+ add_event(
+ AgentEventType.TASK_START,
+ "Agent 审计任务启动,开始智能漏洞挖掘",
+ metadata={"target_vulnerabilities": task.target_vulnerabilities},
+ time_offset_seconds=0
+ )
+
+ # ========== 规划阶段 ==========
+ add_event(
+ AgentEventType.PHASE_START,
+ "进入规划阶段 - 分析项目结构,制定审计策略",
+ phase=AgentTaskPhase.PLANNING,
+ time_offset_seconds=5
+ )
+
+ add_event(
+ AgentEventType.THINKING,
+ "分析项目结构:检测到 Flask Web 应用框架,包含用户认证、数据库操作、文件处理等模块。重点关注 SQL 注入、XSS、命令注入等高危漏洞。",
+ phase=AgentTaskPhase.PLANNING,
+ tokens_used=450,
+ time_offset_seconds=10
+ )
+
+ add_event(
+ AgentEventType.PLANNING,
+ "制定审计计划:1) 索引代码库 2) 识别入口点 3) 模式匹配检测 4) 数据流分析 5) 沙箱验证 6) 生成报告",
+ phase=AgentTaskPhase.PLANNING,
+ tokens_used=380,
+ time_offset_seconds=15
+ )
+
+ add_event(
+ AgentEventType.PHASE_COMPLETE,
+ "规划阶段完成,识别出 12 个高优先级检查点",
+ phase=AgentTaskPhase.PLANNING,
+ time_offset_seconds=20
+ )
+
+ # ========== 索引阶段 ==========
+ add_event(
+ AgentEventType.PHASE_START,
+ "进入索引阶段 - 构建代码向量索引",
+ phase=AgentTaskPhase.INDEXING,
+ time_offset_seconds=25
+ )
+
+ add_event(
+ AgentEventType.TOOL_CALL,
+ "调用 RAG 索引工具,处理源代码文件",
+ phase=AgentTaskPhase.INDEXING,
+ tool_name="rag_index",
+ tool_input={"paths": ["app/", "routes/", "models/", "utils/"], "chunk_size": 1500},
+ time_offset_seconds=30
+ )
+
+ add_event(
+ AgentEventType.RAG_RESULT,
+ "代码索引完成:48 个文件,156 个代码块,向量维度 1536",
+ phase=AgentTaskPhase.INDEXING,
+ tool_name="rag_index",
+ tool_output={"files_indexed": 48, "chunks_created": 156, "vector_dim": 1536},
+ tool_duration_ms=8500,
+ time_offset_seconds=45
+ )
+
+ add_event(
+ AgentEventType.PHASE_COMPLETE,
+ "索引阶段完成",
+ phase=AgentTaskPhase.INDEXING,
+ time_offset_seconds=50
+ )
+
+ # ========== 分析阶段 ==========
+ add_event(
+ AgentEventType.PHASE_START,
+ "进入分析阶段 - 执行漏洞检测",
+ phase=AgentTaskPhase.ANALYSIS,
+ time_offset_seconds=55
+ )
+
+ # SQL 注入检测
+ add_event(
+ AgentEventType.THINKING,
+ "开始检测 SQL 注入漏洞:搜索数据库查询相关代码,识别用户输入拼接到 SQL 语句的模式",
+ phase=AgentTaskPhase.ANALYSIS,
+ tokens_used=320,
+ time_offset_seconds=60
+ )
+
+ add_event(
+ AgentEventType.RAG_QUERY,
+ "语义检索:查找 SQL 查询和用户输入处理代码",
+ phase=AgentTaskPhase.ANALYSIS,
+ tool_name="rag_search",
+ tool_input={"query": "SQL query user input parameter database execute", "top_k": 10},
+ time_offset_seconds=65
+ )
+
+ add_event(
+ AgentEventType.TOOL_CALL,
+ "读取文件: app/routes/user.py",
+ phase=AgentTaskPhase.ANALYSIS,
+ tool_name="read_file",
+ tool_input={"path": "app/routes/user.py", "start_line": 45, "end_line": 80},
+ time_offset_seconds=70
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现 SQL 注入漏洞 [Critical]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "sql_injection", "severity": "critical", "file": "app/routes/user.py", "line": 52},
+ time_offset_seconds=80
+ )
+
+ # XSS 检测
+ add_event(
+ AgentEventType.THINKING,
+ "开始检测 XSS 漏洞:搜索 HTML 渲染和用户输入输出相关代码",
+ phase=AgentTaskPhase.ANALYSIS,
+ tokens_used=280,
+ time_offset_seconds=120
+ )
+
+ add_event(
+ AgentEventType.TOOL_CALL,
+ "读取文件: app/templates/comment.html",
+ phase=AgentTaskPhase.ANALYSIS,
+ tool_name="read_file",
+ tool_input={"path": "app/templates/comment.html"},
+ time_offset_seconds=130
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现存储型 XSS 漏洞 [High]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "xss", "severity": "high", "file": "app/templates/comment.html", "line": 28},
+ time_offset_seconds=145
+ )
+
+ # 命令注入检测
+ add_event(
+ AgentEventType.RAG_QUERY,
+ "语义检索:查找系统命令执行相关代码",
+ phase=AgentTaskPhase.ANALYSIS,
+ tool_name="rag_search",
+ tool_input={"query": "os.system subprocess shell command execute", "top_k": 10},
+ time_offset_seconds=180
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现命令注入漏洞 [Critical]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "command_injection", "severity": "critical", "file": "app/utils/backup.py", "line": 34},
+ time_offset_seconds=210
+ )
+
+ # 路径遍历检测
+ add_event(
+ AgentEventType.TOOL_CALL,
+ "分析文件操作代码",
+ phase=AgentTaskPhase.ANALYSIS,
+ tool_name="analyze_code",
+ tool_input={"pattern": "file path user input", "scope": "app/routes/"},
+ time_offset_seconds=250
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现路径遍历漏洞 [High]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "path_traversal", "severity": "high", "file": "app/routes/download.py", "line": 18},
+ time_offset_seconds=280
+ )
+
+ # SSRF 检测
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现 SSRF 漏洞 [High]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "ssrf", "severity": "high", "file": "app/routes/proxy.py", "line": 42},
+ time_offset_seconds=320
+ )
+
+ # 硬编码密钥检测
+ add_event(
+ AgentEventType.TOOL_CALL,
+ "扫描硬编码密钥和敏感信息",
+ phase=AgentTaskPhase.ANALYSIS,
+ tool_name="secret_scan",
+ tool_input={"patterns": ["api_key", "password", "secret", "token"]},
+ time_offset_seconds=360
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现硬编码 API 密钥 [Medium]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "hardcoded_secret", "severity": "medium", "file": "app/config.py", "line": 15},
+ time_offset_seconds=380
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现弱加密配置 [Medium]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "weak_crypto", "severity": "medium", "file": "app/utils/crypto.py", "line": 8},
+ time_offset_seconds=400
+ )
+
+ add_event(
+ AgentEventType.FINDING_NEW,
+ "发现调试模式未关闭 [Low]",
+ phase=AgentTaskPhase.ANALYSIS,
+ metadata={"vulnerability_type": "security_misconfiguration", "severity": "low", "file": "app/__init__.py", "line": 25},
+ time_offset_seconds=420
+ )
+
+ add_event(
+ AgentEventType.PHASE_COMPLETE,
+ "分析阶段完成,发现 8 个潜在漏洞",
+ phase=AgentTaskPhase.ANALYSIS,
+ time_offset_seconds=450
+ )
+
+ # ========== 验证阶段 ==========
+ add_event(
+ AgentEventType.PHASE_START,
+ "进入验证阶段 - 在沙箱环境中验证漏洞",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=460
+ )
+
+ # SQL 注入验证
+ add_event(
+ AgentEventType.SANDBOX_START,
+ "启动沙箱环境验证 SQL 注入漏洞",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ time_offset_seconds=470
+ )
+
+ add_event(
+ AgentEventType.SANDBOX_EXEC,
+ "执行 SQL 注入 PoC:' OR '1'='1' --",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_input={"payload": "' OR '1'='1' --", "target": "/api/user/search?name="},
+ time_offset_seconds=480
+ )
+
+ add_event(
+ AgentEventType.SANDBOX_RESULT,
+ "SQL 注入验证成功 - 成功绕过认证获取所有用户数据",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_output={"success": True, "response_code": 200, "data_leaked": True},
+ tool_duration_ms=1200,
+ time_offset_seconds=490
+ )
+
+ add_event(
+ AgentEventType.FINDING_VERIFIED,
+ "SQL 注入漏洞已验证 [Critical]",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=495
+ )
+
+ # 命令注入验证
+ add_event(
+ AgentEventType.SANDBOX_EXEC,
+ "执行命令注入 PoC:; id; whoami",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_input={"payload": "; id; whoami", "target": "/api/backup?filename="},
+ time_offset_seconds=520
+ )
+
+ add_event(
+ AgentEventType.SANDBOX_RESULT,
+ "命令注入验证成功 - 成功执行任意系统命令",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_output={"success": True, "output": "uid=1000(www-data) gid=1000(www-data)"},
+ tool_duration_ms=800,
+ time_offset_seconds=535
+ )
+
+ add_event(
+ AgentEventType.FINDING_VERIFIED,
+ "命令注入漏洞已验证 [Critical]",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=540
+ )
+
+ # XSS 验证
+ add_event(
+ AgentEventType.SANDBOX_EXEC,
+ "执行 XSS PoC:",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_input={"payload": "", "target": "/api/comment"},
+ time_offset_seconds=560
+ )
+
+ add_event(
+ AgentEventType.FINDING_VERIFIED,
+ "存储型 XSS 漏洞已验证 [High]",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=580
+ )
+
+ # 路径遍历验证
+ add_event(
+ AgentEventType.SANDBOX_EXEC,
+ "执行路径遍历 PoC:../../../etc/passwd",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_input={"payload": "../../../etc/passwd", "target": "/api/download?file="},
+ time_offset_seconds=600
+ )
+
+ add_event(
+ AgentEventType.FINDING_VERIFIED,
+ "路径遍历漏洞已验证 [High]",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=620
+ )
+
+ # SSRF 验证
+ add_event(
+ AgentEventType.SANDBOX_EXEC,
+ "执行 SSRF PoC:http://169.254.169.254/latest/meta-data/",
+ phase=AgentTaskPhase.VERIFICATION,
+ tool_name="sandbox",
+ tool_input={"payload": "http://169.254.169.254/latest/meta-data/", "target": "/api/proxy?url="},
+ time_offset_seconds=640
+ )
+
+ add_event(
+ AgentEventType.FINDING_VERIFIED,
+ "SSRF 漏洞已验证 [High]",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=660
+ )
+
+ # 误报排除
+ add_event(
+ AgentEventType.THINKING,
+ "验证硬编码密钥:检查是否为测试/示例配置",
+ phase=AgentTaskPhase.VERIFICATION,
+ tokens_used=180,
+ time_offset_seconds=680
+ )
+
+ add_event(
+ AgentEventType.FINDING_FALSE_POSITIVE,
+ "硬编码密钥为误报 - 该文件为示例配置模板",
+ phase=AgentTaskPhase.VERIFICATION,
+ metadata={"reason": "File is example configuration template, not production code"},
+ time_offset_seconds=700
+ )
+
+ add_event(
+ AgentEventType.PHASE_COMPLETE,
+ "验证阶段完成:6 个漏洞已验证,1 个误报已排除",
+ phase=AgentTaskPhase.VERIFICATION,
+ time_offset_seconds=720
+ )
+
+ # ========== 报告阶段 ==========
+ add_event(
+ AgentEventType.PHASE_START,
+ "进入报告阶段 - 生成安全审计报告",
+ phase=AgentTaskPhase.REPORTING,
+ time_offset_seconds=730
+ )
+
+ add_event(
+ AgentEventType.TOOL_CALL,
+ "生成漏洞详情和修复建议",
+ phase=AgentTaskPhase.REPORTING,
+ tool_name="generate_report",
+ tool_input={"format": "html", "include_poc": True, "include_fix": True},
+ time_offset_seconds=740
+ )
+
+ add_event(
+ AgentEventType.INFO,
+ "报告生成完成:包含 8 个发现、6 个已验证漏洞、详细修复建议和 PoC 代码",
+ phase=AgentTaskPhase.REPORTING,
+ time_offset_seconds=760
+ )
+
+ add_event(
+ AgentEventType.PHASE_COMPLETE,
+ "报告阶段完成",
+ phase=AgentTaskPhase.REPORTING,
+ time_offset_seconds=770
+ )
+
+ # ========== 任务完成 ==========
+ add_event(
+ AgentEventType.TASK_COMPLETE,
+ "Agent 审计任务完成!发现 8 个安全问题,其中 2 个严重、3 个高危、2 个中危、1 个低危",
+ metadata={
+ "total_findings": 8,
+ "verified": 6,
+ "false_positives": 1,
+ "severity_distribution": {"critical": 2, "high": 3, "medium": 2, "low": 1},
+ "duration_seconds": 780,
+ "tokens_used": 45680,
+ },
+ time_offset_seconds=780
+ )
+
+ # 批量保存事件
+ for event in events:
+ db.add(event)
+
+ await db.flush()
+ print(f"✓ 创建了 {len(events)} 个 Agent 事件")
+
+ return events
+
+
+async def create_agent_findings(db: AsyncSession, task: AgentTask) -> list:
+ """创建 Agent 发现的漏洞"""
+
+ findings_data = [
+ {
+ "vulnerability_type": VulnerabilityType.SQL_INJECTION,
+ "severity": VulnerabilitySeverity.CRITICAL,
+ "title": "用户搜索接口存在 SQL 注入漏洞",
+ "description": "在 /api/user/search 接口中,用户输入的 name 参数直接拼接到 SQL 查询语句中,未经过任何过滤或参数化处理,攻击者可以通过构造恶意输入执行任意 SQL 语句。",
+ "file_path": "app/routes/user.py",
+ "line_start": 52,
+ "line_end": 58,
+ "function_name": "search_user",
+ "code_snippet": '''@app.route('/api/user/search')
+def search_user():
+ name = request.args.get('name', '')
+ # 危险:直接拼接用户输入到SQL语句
+ query = f"SELECT * FROM users WHERE name LIKE '%{name}%'"
+ result = db.execute(query)
+ return jsonify(result.fetchall())''',
+ "source": "request.args.get('name')",
+ "sink": "db.execute(query)",
+ "dataflow_path": [
+ {"step": 1, "location": "line 54", "description": "用户输入从 request.args.get() 获取"},
+ {"step": 2, "location": "line 56", "description": "用户输入直接拼接到 SQL 字符串"},
+ {"step": 3, "location": "line 57", "description": "拼接后的 SQL 被执行"},
+ ],
+ "status": FindingStatus.VERIFIED,
+ "is_verified": True,
+ "verification_method": "沙箱验证 - 成功执行 SQL 注入攻击",
+ "verification_result": {"success": True, "payload": "' OR '1'='1' --", "impact": "绕过认证,获取所有用户数据"},
+ "has_poc": True,
+ "poc_code": '''import requests
+
+# SQL 注入 PoC
+target_url = "http://target.com/api/user/search"
+
+# Payload: 绕过认证获取所有用户
+payload = "' OR '1'='1' --"
+
+response = requests.get(target_url, params={"name": payload})
+print(f"Status: {response.status_code}")
+print(f"Data: {response.json()}")
+
+# 预期结果:返回所有用户数据,而非仅匹配搜索条件的用户''',
+ "poc_description": "通过在 name 参数中注入 SQL 语句,绕过查询条件获取数据库中所有用户信息",
+ "poc_steps": [
+ "访问目标 URL: /api/user/search?name=' OR '1'='1' --",
+ "观察响应:应返回所有用户数据",
+ "进一步利用:可尝试 UNION 注入获取其他表数据",
+ ],
+ "suggestion": "使用参数化查询或 ORM 框架来防止 SQL 注入",
+ "fix_code": '''@app.route('/api/user/search')
+def search_user():
+ name = request.args.get('name', '')
+ # 修复:使用参数化查询
+ query = "SELECT * FROM users WHERE name LIKE :name"
+ result = db.execute(query, {"name": f"%{name}%"})
+ return jsonify(result.fetchall())''',
+ "fix_description": "使用 SQLAlchemy 的参数化查询功能,将用户输入作为参数传递,而非直接拼接到 SQL 语句中",
+ "references": [
+ {"type": "CWE", "id": "CWE-89", "url": "https://cwe.mitre.org/data/definitions/89.html"},
+ {"type": "OWASP", "id": "A03:2021", "url": "https://owasp.org/Top10/A03_2021-Injection/"},
+ ],
+ "ai_explanation": "这是一个典型的 SQL 注入漏洞。代码直接将用户输入拼接到 SQL 查询字符串中,没有进行任何转义或参数化处理。攻击者可以通过特殊字符(如单引号)闭合原有的 SQL 语句,然后注入自己的 SQL 代码。",
+ "ai_confidence": 0.98,
+ "xai_what": "SQL 注入是一种代码注入技术,攻击者通过在输入字段中插入恶意 SQL 代码来操纵数据库查询。",
+ "xai_why": "该漏洞存在是因为开发者直接将用户输入拼接到 SQL 语句中,没有使用参数化查询或进行输入验证。",
+ "xai_how": "攻击者可以在 name 参数中输入 ' OR '1'='1' -- 来绕过查询条件,或使用 UNION SELECT 来获取其他表的数据。",
+ "xai_impact": "攻击者可以:1) 绕过认证 2) 读取敏感数据 3) 修改或删除数据 4) 在某些情况下执行系统命令。",
+ "cvss_score": 9.8,
+ "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+ "tags": ["owasp-top10", "injection", "database", "authentication-bypass"],
+ },
+ {
+ "vulnerability_type": VulnerabilityType.COMMAND_INJECTION,
+ "severity": VulnerabilitySeverity.CRITICAL,
+ "title": "备份功能存在命令注入漏洞",
+ "description": "在备份功能中,用户提供的文件名参数直接传递给 os.system() 函数执行,攻击者可以通过命令分隔符(如 ; 或 |)注入任意系统命令。",
+ "file_path": "app/utils/backup.py",
+ "line_start": 34,
+ "line_end": 40,
+ "function_name": "create_backup",
+ "code_snippet": '''def create_backup(filename):
+ """创建备份文件"""
+ # 危险:直接将用户输入传递给系统命令
+ backup_path = f"/backups/{filename}.tar.gz"
+ cmd = f"tar -czf {backup_path} /data/"
+ os.system(cmd) # 命令注入风险
+ return backup_path''',
+ "source": "filename 参数",
+ "sink": "os.system(cmd)",
+ "dataflow_path": [
+ {"step": 1, "location": "line 34", "description": "filename 参数从外部传入"},
+ {"step": 2, "location": "line 36", "description": "filename 拼接到 shell 命令"},
+ {"step": 3, "location": "line 37", "description": "命令通过 os.system() 执行"},
+ ],
+ "status": FindingStatus.VERIFIED,
+ "is_verified": True,
+ "verification_method": "沙箱验证 - 成功执行任意命令",
+ "verification_result": {"success": True, "payload": "; id; whoami", "output": "uid=1000(www-data)"},
+ "has_poc": True,
+ "poc_code": '''import requests
+
+# 命令注入 PoC
+target_url = "http://target.com/api/backup"
+
+# Payload: 注入系统命令
+payload = "test; id; cat /etc/passwd"
+
+response = requests.post(target_url, json={"filename": payload})
+print(f"Response: {response.text}")
+
+# 预期结果:服务器执行 id 和 cat /etc/passwd 命令''',
+ "poc_description": "通过在 filename 参数中注入分号和系统命令,在服务器上执行任意代码",
+ "poc_steps": [
+ "构造恶意 filename: test; id; cat /etc/passwd",
+ "发送请求到 /api/backup 接口",
+ "观察服务器响应或日志中的命令执行结果",
+ ],
+ "suggestion": "避免使用 os.system(),改用 subprocess 模块并禁用 shell=True,对用户输入进行严格的白名单验证",
+ "fix_code": '''import subprocess
+import re
+
+def create_backup(filename):
+ """创建备份文件 - 安全版本"""
+ # 修复:验证文件名只包含安全字符
+ if not re.match(r'^[a-zA-Z0-9_-]+$', filename):
+ raise ValueError("Invalid filename")
+
+ backup_path = f"/backups/{filename}.tar.gz"
+ # 修复:使用 subprocess 并传递参数列表
+ subprocess.run(
+ ["tar", "-czf", backup_path, "/data/"],
+ check=True,
+ shell=False # 禁用shell
+ )
+ return backup_path''',
+ "fix_description": "1) 使用正则表达式验证文件名只包含安全字符 2) 使用 subprocess.run() 替代 os.system() 3) 禁用 shell 模式,将参数作为列表传递",
+ "references": [
+ {"type": "CWE", "id": "CWE-78", "url": "https://cwe.mitre.org/data/definitions/78.html"},
+ {"type": "OWASP", "id": "A03:2021", "url": "https://owasp.org/Top10/A03_2021-Injection/"},
+ ],
+ "ai_explanation": "这是一个严重的命令注入漏洞。os.system() 函数会通过 shell 执行命令,当用户输入被直接拼接到命令字符串中时,攻击者可以使用 shell 的特殊字符(如 ;、|、&&)来注入额外的命令。",
+ "ai_confidence": 0.99,
+ "xai_what": "命令注入允许攻击者在目标系统上执行任意操作系统命令。",
+ "xai_why": "该漏洞存在是因为用户输入直接拼接到 shell 命令中,没有进行任何过滤或转义。",
+ "xai_how": "攻击者可以在 filename 参数中输入 ; rm -rf / 来删除服务器文件,或执行反弹 shell 获取服务器控制权。",
+ "xai_impact": "完全的服务器控制权,包括:读取敏感文件、安装后门、横向移动、数据窃取、服务中断等。",
+ "cvss_score": 10.0,
+ "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
+ "tags": ["owasp-top10", "injection", "rce", "critical"],
+ },
+ {
+ "vulnerability_type": VulnerabilityType.XSS,
+ "severity": VulnerabilitySeverity.HIGH,
+ "title": "评论功能存在存储型 XSS 漏洞",
+ "description": "用户提交的评论内容在展示时未经 HTML 转义直接渲染,攻击者可以在评论中注入恶意 JavaScript 代码,当其他用户查看评论时会执行这些代码。",
+ "file_path": "app/templates/comment.html",
+ "line_start": 28,
+ "line_end": 32,
+ "function_name": None,
+ "code_snippet": '''''',
+ "source": "comment.content (用户提交的评论)",
+ "sink": "{{ comment.content | safe }}",
+ "status": FindingStatus.VERIFIED,
+ "is_verified": True,
+ "verification_method": "沙箱验证 - XSS payload 成功执行",
+ "verification_result": {"success": True, "payload": ""},
+ "has_poc": True,
+ "poc_code": """import requests
+
+# 存储型 XSS PoC
+target_url = "http://target.com/api/comment"
+
+# Payload: 窃取用户 Cookie
+payload = ''
+
+response = requests.post(target_url, json={"content": payload})
+print(f"Comment posted: {response.status_code}")
+
+# 当其他用户访问评论页面时,恶意脚本会自动执行""",
+ "poc_description": "通过在评论中注入 JavaScript 代码,当其他用户查看页面时窃取其 Cookie",
+ "suggestion": "移除 safe 过滤器,让 Jinja2 自动转义 HTML 特殊字符",
+ "fix_code": '''''',
+ "fix_description": "移除 | safe 过滤器,让 Jinja2 模板引擎自动对用户内容进行 HTML 转义",
+ "references": [
+ {"type": "CWE", "id": "CWE-79", "url": "https://cwe.mitre.org/data/definitions/79.html"},
+ {"type": "OWASP", "id": "A03:2021", "url": "https://owasp.org/Top10/A03_2021-Injection/"},
+ ],
+ "ai_confidence": 0.96,
+ "xai_what": "存储型 XSS 是指恶意脚本被永久存储在目标服务器上,当用户访问包含该脚本的页面时会自动执行。",
+ "xai_why": "该漏洞存在是因为模板使用了 safe 过滤器,禁用了 Jinja2 的自动 HTML 转义功能。",
+ "xai_how": "攻击者提交包含
{{ comment.content | safe }}
+ +