安全架构

📎 引用文件

本文引用的文件 - agent/src/api/security.py - agent/src/api/auth_routes.py - agent/src/config/env_schema.py - agent/src/channels/utils.py - agent/src/security/scanner.py - agent/src/security/network.py - agent/src/security/workspace_access.py - agent/src/security/workspace_policy.py - agent/src/live/audit.py - frontend/src/lib/apiAuth.ts - frontend/src/lib/storage.ts - SECURITY.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与安全权衡
  8. 故障排查指南
  9. 结论
  10. 附录:配置与测试清单

简介

本文件面向 Vibe-Trading 的安全架构,系统性说明认证授权、访问控制、跨域与请求防护、代码执行沙箱、文件系统与网络访问限制、审计日志、威胁检测与应急响应,以及安全配置、漏洞扫描与安全测试方案。目标是帮助开发者与运维人员在不牺牲可用性的前提下,构建可审计、可回滚、可防御的部署环境。

项目结构

安全能力主要分布在以下模块: - API 层鉴权与跨域:FastAPI 中间件与依赖(CORS、安全响应头、DNS 重绑定防护、SSE 票据) - 配置中心:集中式环境变量 schema(API 密钥、CORS、沙箱开关、路径白名单等) - 网络与路径安全:URL 目标校验、私有地址拦截、工作区路径约束 - 外部内容安全:提示注入扫描与特殊 token 中和 - 审计与合规:实盘动作审计账本(追加写入、fsync、哈希链防篡改) - 前端安全:本地存储封装、Bearer 令牌注入

graph TB subgraph "API 网关" A["FastAPI 应用"] M["安全中间件<br/>CSP/权限策略/Host 校验"] D["鉴权依赖<br/>require_auth / require_event_stream_auth"] end subgraph "安全能力" S1["CORS 解析与额外来源"] S2["DNS 重绑定防护"] S3["SSE 票据签发与消费"] S4["API Key 校验"] S5["网络目标校验"] S6["工作区路径约束"] S7["提示注入扫描"] S8["审计账本"] end subgraph "配置" C["EnvConfig<br/>API/Auth/CORS/沙箱/路径"] end A --> M --> D D --> S4 M --> S1 M --> S2 D --> S3 D --> S5 D --> S6 D --> S7 D --> S8 C --> A

图表来源 - agent/src/api/security.py:69-158 - agent/src/api/security.py:166-173 - agent/src/api/security.py:300-340 - agent/src/api/security.py:463-504 - agent/src/channels/utils.py:97-141 - agent/src/security/workspace_policy.py:8-11 - agent/src/security/scanner.py:145-220 - agent/src/live/audit.py:248-351 - agent/src/config/env_schema.py:245-295

章节来源 - agent/src/api/security.py:69-158 - agent/src/config/env_schema.py:245-295

核心组件

章节来源 - agent/src/api/security.py:463-504 - agent/src/api/security.py:591-622 - agent/src/api/security.py:69-158 - agent/src/channels/utils.py:97-141 - agent/src/security/workspace_policy.py:8-11 - agent/src/security/scanner.py:145-220 - agent/src/live/audit.py:248-351 - frontend/src/lib/apiAuth.ts:18-21 - frontend/src/lib/storage.ts:7-29

架构总览

下图展示一次带认证的敏感请求从到达网关到鉴权、资源访问与审计的全链路。

sequenceDiagram participant Client as "客户端" participant API as "FastAPI 应用" participant Auth as "鉴权依赖" participant Net as "网络校验" participant FS as "文件/路径校验" participant Audit as "审计账本" Client->>API : "HTTP 请求(含 Bearer 或 ?ticket=)" API->>Auth : "require_auth / require_event_stream_auth" Auth-->>API : "Principal 或 401/403" API->>Net : "validate_url_target / is_path_within" Net-->>API : "允许/拒绝" API->>FS : "工作区路径/上传目录校验" FS-->>API : "允许/拒绝" API->>Audit : "write_live_action(可选)" Audit-->>API : "记录完成" API-->>Client : "响应(附带安全响应头)"

图表来源 - agent/src/api/security.py:463-504 - agent/src/api/security.py:591-622 - agent/src/channels/utils.py:97-141 - agent/src/security/workspace_policy.py:8-11 - agent/src/live/audit.py:248-351

详细组件分析

认证与授权(API Key、SSE 票据、会话安全)

sequenceDiagram participant FE as "前端" participant API as "API" participant Auth as "鉴权" participant Store as "本地存储" FE->>Store : "读取 API_AUTH_KEY" FE->>API : "POST /auth/sse-ticket (Authorization : Bearer ...)" API->>Auth : "require_auth" Auth-->>API : "通过" API-->>FE : "{ticket}" FE->>API : "GET /stream?ticket=... (无 Authorization)" API->>Auth : "require_event_stream_auth(ticket)" Auth-->>API : "通过(票据已消费)" API-->>FE : "SSE 流"

图表来源 - agent/src/api/security.py:300-340 - agent/src/api/security.py:591-622 - agent/src/api/auth_routes.py:44-55 - frontend/src/lib/apiAuth.ts:18-21 - frontend/src/lib/storage.ts:7-29

章节来源 - agent/src/api/security.py:463-504 - agent/src/api/security.py:591-622 - agent/src/api/auth_routes.py:21-55 - frontend/src/lib/apiAuth.ts:1-21 - frontend/src/lib/storage.ts:1-29

CORS 与跨站请求防护

flowchart TD Start(["请求进入"]) --> Method{"是否浏览器不安全方法?"} Method -- 否 --> Next["继续处理"] Method -- 是 --> CheckOrigin["检查 Origin/sec-fetch-site"] CheckOrigin --> Allowed{"是否同源或可信?"} Allowed -- 否 --> Deny["403 拒绝"] Allowed -- 是 --> Next Next --> End(["返回响应(含安全头)"])

图表来源 - agent/src/api/security.py:69-158 - agent/src/api/security.py:423-431 - agent/src/api/security.py:235-253

章节来源 - agent/src/api/security.py:69-158 - agent/src/api/security.py:235-253 - agent/src/api/security.py:423-431

DNS 重绑定与 Host 校验

章节来源 - agent/src/api/security.py:106-145 - agent/src/api/security.py:166-173

网络请求限制

章节来源 - agent/src/channels/utils.py:97-141 - agent/src/security/network.py:1-11

文件系统访问控制与工作区隔离

章节来源 - agent/src/channels/utils.py:16-32 - agent/src/security/workspace_policy.py:8-11 - agent/src/security/workspace_access.py:1-15

代码执行沙箱与工具输出安全

章节来源 - SECURITY.md:23-28 - agent/src/security/scanner.py:145-220

审计日志、威胁检测与应急响应

章节来源 - agent/src/live/audit.py:248-351 - agent/src/security/scanner.py:145-220 - agent/src/api/security.py:235-253

依赖关系分析

graph LR E["EnvConfig"] --> SEC["security.py"] SEC --> AUTH["require_auth / require_event_stream_auth"] SEC --> CORS["CORS/安全头"] SEC --> HOST["Host/DNS 重绑定"] SEC --> NET["网络校验"] SEC --> FS["路径校验"] SEC --> AUD["审计账本"]

图表来源 - agent/src/config/env_schema.py:245-295 - agent/src/api/security.py:463-504 - agent/src/channels/utils.py:97-141 - agent/src/live/audit.py:248-351

章节来源 - agent/src/config/env_schema.py:245-295 - agent/src/api/security.py:463-504

性能与安全权衡

[本节为通用指导,无需特定文件引用]

故障排查指南

章节来源 - agent/src/api/security.py:463-504 - agent/src/api/security.py:591-622 - agent/src/api/security.py:69-158 - agent/src/channels/utils.py:97-141 - agent/src/live/audit.py:80-97 - agent/src/live/audit.py:316-340

结论

Vibe-Trading 的安全架构以“最小信任面 + 强校验 + 可审计”为核心原则:通过集中配置管理密钥与策略,API 层实施严格的鉴权、跨域与 Host 校验,网络与文件系统访问受到白名单与目标校验约束,外部内容经过提示注入扫描与 token 中和,实盘动作具备追加写入与可选哈希链的审计能力。配合前端安全实践与文档化的安全策略,可在保障可用性的同时有效抵御常见攻击面。

[本节为总结,无需特定文件引用]

附录:配置与测试清单

章节来源 - agent/src/config/env_schema.py:245-295 - agent/src/api/security.py:69-158 - agent/src/api/security.py:235-253 - agent/src/channels/utils.py:97-141 - agent/src/security/scanner.py:145-220 - agent/src/live/audit.py:248-351 - SECURITY.md:23-28