- 漏洞检索 - 支持 CVE 编号和关键词搜索,快速定位漏洞信息
- 漏洞分析 - 结构化展示 CVSS 评分、攻击向量、影响范围
- POC 资源 - 自动聚合 GitHub、Exploit-DB 等平台的 POC 资源
- 应急响应 - 文章体系,支持 Markdown 博客式展示
- 数据同步 - 自动从 NVD API 增量同步漏洞数据
- 全文搜索 - SQLite FTS5 全文搜索引擎
| 组件 | 技术选型 |
|---|---|
| 后端框架 | Rust + Axum |
| 数据库 | SQLite + FTS5 |
| ORM | sqlx |
| 模板引擎 | Askama |
| Markdown | pulldown-cmark |
| HTTP 客户端 | reqwest |
| 异步运行时 | tokio |
Cybersecurity_Knowledge_Base/
├── Cargo.toml # 项目配置和依赖
├── .env # 环境变量配置
├── migrations/
│ └── 20240101000000_init.sql # 数据库迁移脚本
├── src/
│ ├── main.rs # 主程序入口
│ ├── model/
│ │ └── mod.rs # 数据模型定义
│ ├── db/
│ │ └── mod.rs # 数据库操作层
│ ├── parser/
│ │ └── mod.rs # NVD API 数据解析器
│ ├── sync/
│ │ └── mod.rs # 数据同步模块
│ ├── service/
│ │ └── mod.rs # 业务逻辑层
│ └── api/
│ ├── mod.rs # API 模块声明
│ ├── pages.rs # 页面路由
│ ├── vulnerabilities.rs # 漏洞 API
│ ├── poc.rs # POC API
│ ├── search.rs # 搜索 API
│ └── articles.rs # 文章 API
├── templates/ # Askama HTML 模板
│ ├── base.html # 基础模板
│ ├── index.html # 首页
│ ├── vulnerabilities.html # 漏洞列表页
│ ├── vulnerability_detail.html # 漏洞详情页
│ ├── articles.html # 文章列表页
│ └── article_detail.html # 文章详情页
├── static/
│ ├── css/
│ │ └── style.css # 样式文件
│ └── js/
│ └── main.js # 交互逻辑
├── content/ # 用户上传的 Markdown 文档
└── knowledge_base.db # SQLite 数据库文件
- Rust 1.70+
- NVD API Key(可选,但强烈推荐)
- 克隆项目
git clone https://github.com/your-username/Cybersecurity_Knowledge_Base.git
cd Cybersecurity_Knowledge_Base- 配置环境变量
编辑 .env 文件:
DATABASE_URL=sqlite://knowledge_base.db?mode=rwc
RUST_LOG=info
NVD_API_KEY=your_api_key_here获取 NVD API Key:访问 NVD API 官网 申请免费 API Key
- 编译运行
cargo run- 访问系统
浏览器打开 http://localhost:3000
| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
DATABASE_URL |
否 | sqlite://knowledge_base.db?mode=rwc |
SQLite 数据库连接字符串 |
RUST_LOG |
否 | info |
日志级别 (error/warn/info/debug/trace) |
NVD_API_KEY |
否 | 无 | NVD API 密钥(无 Key 限制请求频率) |
- 无 API Key:每 30 秒 5 个请求
- 有 API Key:每 30 秒 50 个请求
建议申请 API Key 以获得更快的数据同步速度。
- Base URL:
http://localhost:3000/api/v1 - 响应格式: JSON
GET /api/v1/vulnerabilities查询参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
page |
int | 否 | 1 | 页码 |
page_size |
int | 否 | 20 | 每页数量 |
severity |
string | 否 | 无 | 严重等级筛选 (CRITICAL/HIGH/MEDIUM/LOW) |
响应示例
{
"success": true,
"data": [
{
"id": "CVE-2024-1234",
"name": null,
"description": "A vulnerability in...",
"severity": "HIGH",
"cvss_score": 8.5,
"cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"publish_date": "2024-01-15T10:30:00.000",
"update_date": "2024-01-20T15:45:00.000",
"impact": "高影响",
"attack_vector": "网络",
"affected_versions": null,
"exploit_conditions": null,
"fix_steps": null
}
],
"page": 1,
"page_size": 20
}GET /api/v1/vulnerabilities/{id}路径参数
| 参数 | 类型 | 说明 |
|---|---|---|
id |
string | CVE 编号 (如 CVE-2024-1234) |
响应示例
{
"success": true,
"data": {
"vulnerability": {
"id": "CVE-2024-1234",
"severity": "HIGH",
"cvss_score": 8.5,
"description": "A vulnerability in...",
"fix_steps": "1. Update to version 2.0..."
},
"pocs": [
{
"id": 1,
"cve_id": "CVE-2024-1234",
"poc_url": "https://github.com/example/poc",
"source": "github",
"language": "python",
"verified": 0,
"usage": "python poc.py",
"cache_time": "2024-01-20 15:45:00"
}
]
}
}GET /api/v1/vulnerabilities/{id}/pocGET /api/v1/search?q={query}查询参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
q |
string | 是 | 无 | 搜索关键词 |
limit |
int | 否 | 50 | 结果数量限制 |
GET /api/v1/articles查询参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
page |
int | 否 | 1 | 页码 |
page_size |
int | 否 | 20 | 每页数量 |
存储漏洞基本信息
| 字段 | 类型 | 说明 |
|---|---|---|
| id | TEXT (PK) | CVE 编号 |
| name | TEXT | 漏洞名称 |
| description | TEXT | 漏洞描述 |
| severity | TEXT | 严重等级 (CRITICAL/HIGH/MEDIUM/LOW) |
| cvss_score | REAL | CVSS 评分 |
| cvss_vector | TEXT | CVSS 向量字符串 |
| publish_date | TEXT | 发布日期 |
| update_date | TEXT | 更新日期 |
| impact | TEXT | 影响范围 |
| affected_versions | TEXT | 受影响版本 |
| exploit_conditions | TEXT | 利用条件 |
| attack_vector | TEXT | 攻击向量 |
| fix_steps | TEXT | 修复步骤 |
存储 POC 资源信息
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER (PK) | 自增 ID |
| cve_id | TEXT | 关联的 CVE 编号 |
| poc_url | TEXT (UNIQUE) | POC 链接 |
| source | TEXT | 来源 (github/exploit-db) |
| type | TEXT | 类型 (exploit) |
| language | TEXT | 编程语言 |
| verified | INTEGER | 是否已验证 (0/1) |
| usage | TEXT | 使用方法 |
| cache_time | TEXT | 缓存时间 |
存储漏洞参考链接
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER (PK) | 自增 ID |
| cve_id | TEXT | 关联的 CVE 编号 |
| url | TEXT | 参考链接 |
| source | TEXT | 来源 |
| tags | TEXT | 标签 |
存储应急响应文章
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER (PK) | 自增 ID |
| title | TEXT | 文章标题 |
| content | TEXT | Markdown 内容 |
| tags | TEXT | 标签 |
| related_cve | TEXT | 关联 CVE |
| create_time | TEXT | 创建时间 |
全文搜索索引
CREATE VIRTUAL TABLE vuln_fts USING fts5(id, name, description)
| 路由 | 说明 |
|---|---|
/ |
首页 |
/vulnerabilities |
漏洞列表页 |
/vulnerabilities/:id |
漏洞详情页 |
/articles |
文章列表页 |
/articles/:id |
文章详情页 |
- 在
src/api/下创建或修改处理函数 - 在
src/main.rs中注册路由 - 在
src/service/中实现业务逻辑 - 在
src/db/中添加数据库操作
- 在
templates/下创建 Askama 模板 - 继承
base.html基础模板 - 在
src/api/pages.rs中添加页面处理函数 - 在
src/main.rs中注册页面路由
在 migrations/ 目录下创建新的 SQL 文件:
-- migrations/20240101000001_add_new_feature.sql
ALTER TABLE vulnerabilities ADD COLUMN new_field TEXT;cargo testcargo fmtcargo clippy- Fork 项目
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- 项目地址: GitHub Repository
- 问题反馈: Issues