安全系统

📎 引用文件

本文引用的文件 - agent/src/api/security.py - agent/src/core/runner.py - agent/src/session/service.py - agent/src/live/enforcement.py - agent/src/security/scanner.py - agent/src/security/network.py - agent/backtest/loaders/_http.py - frontend/src/lib/apiAuth.ts - SECURITY.md

目录

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

简介

本文件为 Vibe-Trading 的安全系统提供全面、可操作的安全文档,覆盖认证授权、API 密钥管理、会话管理、权限控制、审计日志、沙箱执行环境、代码隔离、资源限制、网络控制、文件访问控制、威胁模型与防护措施、常见安全问题及解决方案。重点强调多层防护、沙箱机制与审计追踪系统,帮助运维与开发者在本地与生产环境中安全部署与运行。

项目结构

围绕安全的关键模块分布在后端 API、会话服务、回测执行器、实盘风控、外部内容扫描与网络工具中;前端负责 API 密钥的存储与注入。整体采用“默认拒绝 + 最小暴露”的设计原则,结合运行时限制与静态检查形成纵深防御。

graph TB FE["前端<br/>apiAuth.ts"] --> API["API 鉴权与安全头<br/>security.py"] API --> SESS["会话服务<br/>service.py"] SESS --> RUNNER["回测执行器沙箱<br/>runner.py"] SESS --> LIVE["实盘下单前风控<br/>enforcement.py"] RUNNER --> NET["网络限流/代理<br/>_http.py"] SESS --> SCAN["外部内容扫描<br/>scanner.py"] API --> NET

图表来源 - agent/src/api/security.py:166-253 - agent/src/session/service.py:158-246 - agent/src/core/runner.py:431-590 - agent/src/live/enforcement.py:455-617 - agent/backtest/loaders/_http.py:88-129 - frontend/src/lib/apiAuth.ts:1-21

章节来源 - agent/src/api/security.py:166-253 - agent/src/session/service.py:158-246 - agent/src/core/runner.py:431-590 - agent/src/live/enforcement.py:455-617 - agent/backtest/loaders/_http.py:88-129 - frontend/src/lib/apiAuth.ts:1-21

核心组件

章节来源 - agent/src/api/security.py:343-622 - agent/src/session/service.py:53-246 - agent/src/core/runner.py:33-278 - agent/src/live/enforcement.py:1-26 - agent/src/security/scanner.py:1-220 - agent/backtest/loaders/_http.py:88-129

架构总览

下图展示从浏览器到后端的完整安全链路:前端携带 API 密钥或获取一次性票据,服务端进行 CORS/Host/DNS 重绑定防护、安全头注入、访问日志脱敏;会话服务保证单会话串行执行并记录审计事件;回测执行器在沙箱内运行,限制资源与环境;实盘下单前通过风控门控强制失败关闭;外部内容读取时注入安全警告并中和危险标记。

sequenceDiagram participant Browser as "浏览器" participant API as "API 鉴权<br/>security.py" participant SSE as "SSE 票据<br/>security.py" participant Session as "会话服务<br/>service.py" participant Runner as "回测执行器<br/>runner.py" participant Live as "实盘风控<br/>enforcement.py" Browser->>API : "POST /auth/sse-ticket (Bearer)" API-->>Browser : "返回一次性 ticket" Browser->>API : "GET /events?ticket=..." API->>Session : "建立会话/发送消息" Session->>Runner : "执行回测沙箱" Runner-->>Session : "结果与工件" Session->>Live : "下单前风控校验" Live-->>Session : "允许/暂停/拒绝" Session-->>Browser : "SSE 事件流含审计"

图表来源 - agent/src/api/security.py:300-341 - agent/src/api/security.py:571-622 - agent/src/session/service.py:158-246 - agent/src/core/runner.py:503-590 - agent/src/live/enforcement.py:455-617

详细组件分析

认证与授权(API 密钥、SSE 票据、CORS、安全头)

flowchart TD Start(["请求进入"]) --> CheckMethod{"是否安全方法?"} CheckMethod --> |否| RejectCrossSite["拒绝跨站请求"] CheckMethod --> |是| HasKey{"是否配置 API 密钥?"} HasKey --> |是| ValidateToken["验证 Bearer/票据"] HasKey --> |否| IsLocal{"是否本地客户端?"} IsLocal --> |是| AllowLoopback["放行本地开发"] IsLocal --> |否| RequireKey["要求 API 密钥"] ValidateToken --> ApplyHeaders["附加安全响应头"] ApplyHeaders --> End(["响应"]) RejectCrossSite --> End AllowLoopback --> End RequireKey --> End

图表来源 - agent/src/api/security.py:383-451 - agent/src/api/security.py:571-622 - agent/src/api/security.py:166-253 - agent/src/api/security.py:260-297

章节来源 - agent/src/api/security.py:300-622 - agent/src/api/security.py:166-253 - agent/src/api/security.py:260-297

会话管理与审计追踪

sequenceDiagram participant Client as "客户端" participant Service as "会话服务<br/>service.py" participant Bus as "事件总线" participant Loop as "AgentLoop" Client->>Service : "send_message(session_id, content)" Service->>Service : "_reserve_session()" Service->>Bus : "message.received" Service->>Loop : "异步执行 attempt" Loop-->>Bus : "tool_call/tool_result" Loop-->>Service : "完成/取消/失败" Service->>Bus : "attempt.completed/cancelled/failed"

图表来源 - agent/src/session/service.py:158-246 - agent/src/session/service.py:248-345

章节来源 - agent/src/session/service.py:53-246 - agent/src/session/service.py:248-345

沙箱执行环境与代码隔离

flowchart TD A["构建运行环境"] --> B["复制白名单环境变量"] B --> C["创建临时 HOME仅符号链接必要路径"] C --> D{"是否支持 UID 降权?"} D --> |是| E["以非特权用户执行"] D --> |否| F["以当前用户执行记录警告"] E --> G["应用资源限制RLIMIT_AS/NOFILE"] F --> G G --> H["执行入口脚本带超时"] H --> I["收集日志与工件"]

图表来源 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:113-172 - agent/src/core/runner.py:85-111 - agent/src/core/runner.py:480-590

章节来源 - agent/src/core/runner.py:33-278 - agent/src/core/runner.py:480-590

网络控制与文件访问控制

章节来源 - agent/backtest/loaders/_http.py:88-129 - agent/src/core/runner.py:175-278 - agent/src/core/runner.py:113-172

权限控制与实盘风控(mandate enforcement)

flowchart TD S["开始:OrderIntent"] --> A["排除列表检查"] A --> |命中| Deny1["拒绝universe"] A --> |未命中| B["允许工具类型检查"] B --> |未允许| Deny2["拒绝instrument"] B --> |允许| C["资产类别检查"] C --> |未允许| Deny3["拒绝universe"] C --> |允许| D["单笔名义上限"] D --> |超限| Pause1["暂停quantitative"] D --> |通过| E["总敞口上限"] E --> |超限| Pause2["暂停quantitative"] E --> |通过| F["杠杆上限"] F --> |超限| Pause3["暂停quantitative"] F --> |通过| G["日笔数上限"] G --> |超限| Pause4["暂停quantitative"] G --> |通过| H["资金上限买入"] H --> |超限| Pause5["暂停quantitative"] H --> |通过| Allow["允许"]

图表来源 - agent/src/live/enforcement.py:455-617 - agent/src/live/enforcement.py:620-676

章节来源 - agent/src/live/enforcement.py:1-26 - agent/src/live/enforcement.py:455-617 - agent/src/live/enforcement.py:620-676

外部内容安全与提示注入防护

章节来源 - agent/src/security/scanner.py:1-220

前端 API 密钥管理

章节来源 - frontend/src/lib/apiAuth.ts:1-21

依赖关系分析

graph LR SEC["security.py"] --> CFG["配置访问器"] SEC --> MOD["会话模型"] SES["session/service.py"] --> BUS["事件总线"] SES --> STORE["会话存储"] RUN["core/runner.py"] --> OS["资源限制/子进程"] LIVE["live/enforcement.py"] --> LOAD["数据加载器链"] SCAN["security/scanner.py"] --> TOOLS["web_reader/doc_reader"] HTTP["_http.py"] --> LOAD

图表来源 - agent/src/api/security.py:20-24 - agent/src/session/service.py:16-25 - agent/src/core/runner.py:19-27 - agent/src/live/enforcement.py:36-41 - agent/src/security/scanner.py:177-220 - agent/backtest/loaders/_http.py:88-129

章节来源 - agent/src/api/security.py:20-24 - agent/src/session/service.py:16-25 - agent/src/core/runner.py:19-27 - agent/src/live/enforcement.py:36-41 - agent/src/security/scanner.py:177-220 - agent/backtest/loaders/_http.py:88-129

性能与安全权衡

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

故障排查指南

章节来源 - agent/src/api/security.py:383-451 - agent/src/api/security.py:571-622 - agent/src/core/runner.py:523-619 - agent/src/live/enforcement.py:137-177 - agent/src/security/scanner.py:145-220

结论

Vibe-Trading 的安全体系通过多层防护实现了从认证授权、会话管理、沙箱执行、网络控制到实盘风控的全链路安全保障。其核心在于“默认拒绝、最小暴露、强制失败关闭”,配合审计追踪与外部内容扫描,有效降低了提示注入、越权访问、资源滥用与数据泄露等风险。建议在生产环境中启用 API 密钥认证、严格 CORS 与 CSP、开启外部内容扫描,并根据业务需求调优沙箱资源限制与网络限流策略。

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

附录:配置与最佳实践

章节来源 - agent/src/api/security.py:30-158 - agent/src/core/runner.py:73-111 - agent/src/live/enforcement.py:455-617 - SECURITY.md:23-28