💻 源码
# LLM 安全攻防演示平台 — 项目规划(已更新)

> 最后更新:2026-06-12  
> 状态:**v1.0 教学演示版已交付**,可用于课堂实验

---

## 〇、版本概览

| 项目 | 初版规划 | 当前现状 |
|------|----------|----------|
| 攻击场景 | 3 类 | **4 类**(新增组合攻击) |
| 攻击样本 | 9 个基础样本 | **18 个**(入门/进阶/高级分级) |
| 前端主题 | 深色 | **浅色**,对比更清晰 |
| 安全可视化 | 仅结果对比 | **摘要栏 + 处理流程弹窗 + 防御层说明** |
| 启动方式 | 手动 pip | **start.bat**(venv + 依赖 + 端口兜底) |
| 测试 | 规划 3 个文件 | **22 项 pytest 全部通过** |
| 真实 LLM | 可选 | 仍可选,默认 Mock |

---

## 一、项目定位

| 维度 | 说明 |
|------|------|
| 受众 | 大模型提示词 / Coze 就业班学员、安全入门者 |
| 形态 | 本地可运行的教学演示系统(非真实生产环境) |
| 核心价值 | **看得见攻击 → 看得见后果 → 看得见防御生效 → 看得见哪一层挡住** |
| 技术栈 | Python 3.11+ / FastAPI / 原生 HTML+CSS+JS / Mock 引擎(默认)/ 可选 OpenAI 兼容 API |
| 项目路径 | `06_代码/Day_03/llm-security-demo/` |

**设计原则**

1. **对比实验**:同一攻击输入,无防护 vs 安全模式并排展示。
2. **可复现**:18 个内置样本 + 红队批量测试,一键触发。
3. **教学友好**:攻击手法、攻击链、后果、防御层、处理流程五步可追踪。
4. **安全边界**:演示用假密钥、假用户数据,Mock 输出均为虚构。

---

## 二、系统架构(当前实现)

```mermaid
flowchart TB
    subgraph Frontend["前端展示层 ✅"]
        UI[4 类场景 + 18 样本]
        Summary[实验结论摘要栏]
        Compare[无防护 vs 安全对比]
        Pipeline[安全处理流程弹窗]
        Warn[防御关闭警告条]
        Settings[统一安全设定面板]
        Redteam[红队批量测试]
    end

    subgraph Backend["Python 后端 ✅"]
        API[FastAPI 路由]
        Vuln[脆弱模式 handler]
        Secure[安全模式 handler]
    end

    subgraph SecurityLayer["统一安全防护层 ✅"]
        InputGuard[① 输入隔离 + 注入检测]
        JailbreakGuard[② 越狱策略检测]
        TaskLock[③ 任务边界锁定]
        LLMStep[④ 安全调用模型]
        OutputGuard[⑤ 输出敏感过滤]
        Audit[审计日志]
    end

    subgraph LLM["模型层"]
        Mock[Mock 规则引擎 - 默认 ✅]
        Real[真实 LLM API - 可选 ⬜]
    end

    UI --> API
    Settings --> API
    API --> Vuln
    API --> Secure
    Vuln --> Mock
    Secure --> SecurityLayer
    SecurityLayer --> Mock
    SecurityLayer --> Real
    Secure --> Pipeline
    Secure --> Audit
```

### 目录结构(实际)

```
llm-security-demo/
├── README.md                    # 快速启动 + 实验路径
├── PROJECT_PLAN.md              # 本文档
├── DEV_PLAN.md                  # 优化迭代记录(已完成)
├── requirements.txt
├── start.bat                    # venv + 依赖 + 端口兜底
├── .env.example
├── app/
│   ├── main.py
│   ├── config.py
│   ├── models/
│   │   ├── schemas.py           # 含 SecurityPipelineStep
│   │   └── scenarios.py
│   ├── llm/
│   │   ├── mock_engine.py       # 支持高级/组合攻击模拟
│   │   └── client.py
│   ├── security/
│   │   ├── layer.py             # 统一安全层 + 流水线步骤
│   │   ├── pipeline.py          # 步骤构建工具
│   │   ├── input_guard.py       # 含 Base64/Coze 变量检测
│   │   ├── jailbreak_guard.py   # 含邪恶双胞胎/JSON 绑架
│   │   ├── output_guard.py
│   │   └── task_lock.py         # 含 context 打印检测
│   ├── handlers/
│   │   ├── vulnerable.py
│   │   └── secure.py
│   └── data/
│       ├── attack_samples.json  # 18 个样本,4 场景
│       └── fake_secrets.json
├── frontend/
│   ├── index.html
│   ├── css/style.css            # 浅色主题
│   └── js/app.js                # 单文件,含摘要栏/流程弹窗
└── tests/
    ├── test_injection.py
    ├── test_jailbreak.py
    ├── test_leakage.py
    └── test_samples.py          # 高级/组合样本回归
```

---

## 三、四大攻击场景(当前样本库)

### 场景 1:提示词注入(5 个样本)

| 编号 | 名称 | 难度 | 攻击手法 | 主要防御层 |
|------|------|------|----------|-----------|
| PI-01 | 指令覆盖 | 入门 | 忽略之前所有指令,劫持角色 | input_isolation |
| PI-02 | 分隔符逃逸 | 进阶 | 伪造 `</user_input>` 注入伪指令 | input_isolation + task_lock |
| PI-03 | 间接注入 | 进阶 | 恶意指令藏在待翻译英文中 | input_isolation + output_guard |
| PI-04 | Base64 编码注入 | 高级 | 编码隐藏 Ignore all rules | input_guard |
| PI-05 | Coze 变量污染 | 高级 | 伪造 `{{user_input}}` 与 [SYSTEM] 标记 | input_isolation + task_lock |

### 场景 2:越狱攻击(5 个样本)

| 编号 | 名称 | 难度 | 攻击手法 | 主要防御层 |
|------|------|------|----------|-----------|
| JB-01 | 科研借口 | 入门 | 以论文为由请求违规内容 | jailbreak_guard |
| JB-02 | DAN 角色扮演 | 进阶 | DAN 模式解除限制 | jailbreak_guard |
| JB-03 | 分步诱导 | 进阶 | 分步骤放松安全规则 | jailbreak_guard |
| JB-04 | 邪恶双胞胎 | 高级 | 对立人格绕过审核 | jailbreak_guard |
| JB-05 | JSON 格式绑架 | 高级 | 用 JSON 约束输出违规步骤 | jailbreak_guard |

### 场景 3:数据泄露(5 个样本)

| 编号 | 名称 | 难度 | 攻击手法 | 主要防御层 |
|------|------|------|----------|-----------|
| DL-01 | 系统提示词套取 | 入门 | 直接要求复述 system prompt | task_lock |
| DL-02 | API Key 套取 | 进阶 | 诱导输出配置密钥 | task_lock + output_guard |
| DL-03 | 用户隐私套取 | 进阶 | 越权列出用户手机号 | task_lock + output_guard |
| DL-04 | 间接复述泄露 | 高级 | 「举例说明」敏感字段 | task_lock + output_guard |
| DL-05 | Context 打印诱导 | 高级 | 假装调试打印完整 context | task_lock + output_guard |

### 场景 4:组合攻击(3 个样本)✅ 新增

| 编号 | 名称 | 难度 | 攻击链 | 主要防御层 |
|------|------|------|--------|-----------|
| COMBO-01 | 注入 + 泄密 | 进阶 | 分隔符逃逸 → 索要 system prompt + API Key | input_isolation + task_lock |
| COMBO-02 | 越狱 + 套密钥 | 高级 | DAN 模式 → 输出 API Key + 连接串 | jailbreak_guard |
| COMBO-03 | 全链组合拳 | 高级 | 科研借口 → Base64 注入 → 拖取用户数据 | 多层联动 |

---

## 四、统一安全防护层(已实现)

```mermaid
sequenceDiagram
    participant U as 用户输入
    participant IG as ① InputGuard
    participant JG as ② JailbreakGuard
    participant TL as ③ TaskLock
    participant LLM as ④ 安全调用模型
    participant OG as ⑤ OutputGuard
    participant UI as 处理流程弹窗

    U->>IG: 原始输入
    IG->>IG: 转义 + 注入检测 + 标签隔离
    IG->>JG: 净化后输入
    alt 越狱高风险
        JG-->>UI: 拦截(blocked)
        JG-->>U: 标准化拒绝
    else 通过
        JG->>TL: 任务白名单检查
        alt 越权/泄密
            TL-->>UI: 拦截(blocked)
            TL-->>U: 标准化拒绝
        else 允许
            TL->>LLM: 安全提示词调用
            LLM->>OG: 原始输出
            OG-->>UI: 通过/脱敏
            OG-->>U: 安全输出
        end
    end
```

### 4.1 可配置项(前端面板)

| 配置项 | 默认值 | 状态 |
|--------|--------|------|
| `enable_input_isolation` | `true` | ✅ |
| `enable_injection_detection` | `true` | ✅ |
| `enable_jailbreak_detection` | `true` | ✅ |
| `enable_output_filter` | `true` | ✅ |
| `task_whitelist` | translate, summarize, faq | ✅ |
| `refusal_message` | 可自定义 | ✅ |
| `audit_enabled` | `true` | ✅ |
| `llm_provider` | `mock` | ✅ 默认 |

关闭任一防护开关时,顶部显示**黄色警告条**。

### 4.2 脆弱模式 vs 安全模式

| 对比维度 | 无防护模式 | 安全模式 |
|----------|-----------|----------|
| 提示词结构 | 用户输入直接拼接,密钥写入 prompt | `<user_input>` 标签隔离 |
| 越狱 | 无检测,尽量回答 | 输入端拒绝 |
| 敏感数据 | 硬编码在 prompt(故意埋雷) | 任务锁定 + 输出脱敏 |
| 攻击成功时 | 摘要栏 🔴 + 后果标签 | — |
| 防御成功时 | — | 摘要栏 🟢 + 拦截层 + 流程弹窗 |
| 教学用途 | 让学员看到伤害 | 让学员看到防御有效 |

---

## 五、前端功能(已实现)

### 5.1 页面布局

```
┌──────────────────────────────────────────────────────────────────┐
│  🛡️ LLM 安全攻防演示平台    ①选样本 → ②发攻击 → ③看对比  [红队] │
├──────────────────────────────────────────────────────────────────┤
│  ⚠️ 防御关闭警告条(有开关关闭时显示)                            │
├──────────┬───────────────────────────────────────┬─────────────┤
│ 攻击场景 │  攻击输入 + [发送对比实验]              │ 统一安全设定 │
│ 4 类 Tab │  ┌─ 实验结论摘要栏(VS 对比)────────┐  │ 防护开关    │
│          │  │ 🔴 无防护:攻击成功 │ 🟢 安全:防御 │  │ 白名单      │
│ 样本库   │  └──────────────────────────────────┘  │ 拒绝话术    │
│ 难度徽章 │  ┌无防护模式──┬──安全模式──┐           │             │
│ 攻击链   │  │ 输出+后果   │ 输出+防御  │[查看流程]│ 状态图例    │
│          │  └────────────┴────────────┘           │             │
│ 攻击说明 │  审计日志                              │             │
│ 防御层   │                                        │             │
└──────────┴───────────────────────────────────────┴─────────────┘
```

### 5.2 关键交互(已实现)

| 交互 | 状态 | 说明 |
|------|------|------|
| 选场景 / 样本 | ✅ | 一键填充,显示难度、攻击链、防御层 |
| 发送对比实验 | ✅ | `/api/compare` 双模式并行 |
| 实验结论摘要栏 | ✅ | 3 秒内判断攻防结果 |
| 安全处理流程弹窗 | ✅ | 5 步流水线,实验后自动弹出 |
| 防御关闭警告 | ✅ | 顶部黄色提示 |
| 红队批量测试 | ✅ | 18 样本 + 按难度统计 |
| 关闭防御后重试 | ✅ | 验证单层防御必要性 |

---

## 六、API 设计(已实现)

| 方法 | 路径 | 状态 |
|------|------|------|
| GET | `/api/scenarios` | ✅ |
| POST | `/api/chat` | ✅ |
| POST | `/api/compare` | ✅ 含 security_pipeline |
| GET | `/api/security/config` | ✅ |
| PUT | `/api/security/config` | ✅ |
| GET | `/api/audit/logs` | ✅ |
| POST | `/api/redteam/run` | ✅ 含 by_level 统计 |

**`/api/compare` 响应扩展(已实现):**

```json
{
  "attack_meta": { "scenario": "combo_attack", "sample_id": "COMBO-03", "intent": "..." },
  "vulnerable": { "attack_success": true, "consequences": ["合规违规", "隐私泄露"] },
  "secure": {
    "attack_success": false,
    "blocked_by": "jailbreak_guard",
    "security_pipeline": [
      { "id": "input_guard", "name": "① 输入隔离与注入检测", "status": "warning", "summary": "..." },
      { "id": "jailbreak_guard", "name": "② 越狱策略检测", "status": "blocked", "summary": "..." }
    ]
  }
}
```

---

## 七、Mock 引擎(已实现)

| 攻击类型 | 脆弱模式 | 安全模式 |
|----------|----------|----------|
| 指令覆盖 | 角色切换 + 泄露提示词片段 | 仅字面翻译 |
| Base64 注入 | 解码后执行恶意指令 | 翻译编码内容 |
| DAN / 邪恶双胞胎 | 输出违规步骤(虚构) | 输入端拒绝 |
| 密钥/用户数据 | 返回 fake_secrets 内容 | 任务锁定 / 脱敏 |
| 组合攻击 | 多后果叠加(最危险优先) | 多层拦截 |

---

## 八、实施阶段(完成情况)

### Phase 1 — 骨架 ✅ 已完成

- [x] FastAPI 项目初始化
- [x] Mock 引擎 + 脆弱/安全双 handler
- [x] 静态前端 + 对比布局
- [x] 三类攻击端到端跑通

### Phase 2 — 安全层 ✅ 已完成

- [x] SecurityLayer 五模块实现
- [x] 统一安全设定 API + 前端面板
- [x] 审计日志
- [x] 安全处理流程可视化(`security_pipeline`)

### Phase 3 — 教学增强 ✅ 已完成

- [x] 后果徽章、防御归因、攻击意图解析
- [x] 红队批量测试(含按难度分组)
- [x] README 操作说明
- [x] 22 项单元测试全部通过
- [x] 浅色 UI 主题
- [x] 实验结论摘要栏
- [x] 防御关闭警告条

### Phase 4 — 内容扩展 ✅ 已完成(原规划外的迭代)

- [x] 第四场景「组合攻击」
- [x] 样本从 9 扩展到 18,含入门/进阶/高级
- [x] 高级攻击:Base64、Coze 变量、邪恶双胞胎、JSON 绑架、Context 打印
- [x] Mock 引擎与 guard 规则补强
- [x] start.bat(venv + 端口兜底)

### Phase 5 — 可选扩展 ⬜ 未做

- [ ] 接入真实 LLM API 作为课堂对比实验
- [ ] 多轮对话注入演示(UI + 会话状态)
- [ ] 导出 PDF / 实验报告
- [ ] 用户角色切换(guest / staff 权限演示)
- [ ] Coze 工作流导入/导出样本

---

## 九、单节课实验流程

本平台设计为 **1 节课** 内的动手实验,学员按以下四步操作即可:

| 步骤 | 操作 | 预期观察 |
|------|------|----------|
| 1. 攻击 | 选样本 → 发送对比实验 | 摘要栏左侧 🔴 攻击成功 |
| 2. 复盘 | 读攻击说明(手法/攻击链/后果) | 理解脆弱配置为何失败 |
| 3. 防御 | 看摘要栏右侧 + 处理流程弹窗 | 🟢 防御成功,明确拦截层 |
| 4. 验证 | 关闭某防御开关 → 重试 | 黄色警告 + 防护降级 |

### 自检清单

- [ ] 能说出 4 类攻击各 2 种手法
- [ ] 能解释组合攻击的攻击链
- [ ] 能从处理流程弹窗指出拦截层
- [ ] 能关闭/开启防御开关并解释差异
- [ ] 能自编 payload 并被安全模式挡住

---

## 十、质量指标(当前)

| 指标 | 目标 | 当前 |
|------|------|------|
| 攻击样本数 | ≥ 15 | **18** |
| 安全模式拦截率(红队) | ≥ 90% | **100%**(18/18) |
| 单元测试 | 核心规则覆盖 | **22 passed** |
| 启动方式 | 一键可用 | **start.bat** |
| 对比可读性 | 3 秒内判断 | **摘要栏实现** |

---

## 十一、风险与边界

1. **仅供教学**:Mock 违规输出为虚构,不生成真实有害内容。
2. **不教真攻击**:禁止将本平台技术用于未授权系统。
3. **假数据**:密钥、用户、内部文档均为 `fake_secrets.json` 虚构项。
4. **规则防御局限**:正则 + 关键词检测可被新型绕过,课堂需强调「深度防御」而非「一劳永逸」。

---

## 十二、快速启动

```bash
# 方式一:双击 start.bat

# 方式二:手动
cd 06_代码/Day_03/llm-security-demo
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
```

访问:**http://127.0.0.1:8000**(8000 占用时 start.bat 自动改用 8001)

```bash
# 运行测试
pytest tests/ -v
```

---

## 十三、后续可选方向

若继续迭代,建议优先级:

| 优先级 | 方向 | 价值 |
|--------|------|------|
| P1 | 接入真实 LLM 对比实验 | 展示「规则防御 vs 模型对齐」差异 |
| P2 | 多轮对话注入 | 演示渐进式攻击 |
| P3 | 实验报告导出 | 学员作业交付 |
| P4 | Coze Bot 专项样本包 | 更贴近就业班场景 |

当前版本已满足课堂教学需求,上述为增强项,非必须。