企业级安全

📎 引用文件

本文引用的文件 - agent/src/api/security.py - agent/src/security/network.py - agent/src/channels/utils.py - agent/src/core/runner.py - agent/tests/test_runner_env.py - agent/tests/test_sse_ticket_and_headers.py - frontend/src/lib/apiAuth.ts - README_zh.md - README.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与安全特性
  8. 故障排除指南
  9. 结论
  10. 附录:合规与审计清单

简介

本文件面向 Vibe-Trading 的企业级安全体系,聚焦多层防护机制:API 密钥管理、会话与流式认证、权限控制、审计追踪、代码沙箱执行环境、资源限制、网络访问控制、工作区隔离、数据加密与传输安全。文档同时提供安全配置最佳实践、漏洞防护与威胁检测思路、审计日志分析方法、合规检查清单以及策略配置示例与故障排除指引。

项目结构

围绕安全的关键位置包括: - API 鉴权与安全头:位于后端 FastAPI 安全模块,统一处理 Bearer 校验、跨站请求保护、CORS、CSP、SSE 票据等。 - 网络访问控制:对通道媒体与外部 URL 进行目标白名单与解析后地址校验,防止 SSRF。 - 回测沙箱与资源限制:通过子进程执行与 rlimit 约束,限制内存与文件句柄,避免滥用。 - 前端凭证注入:浏览器侧将 API Key 以 Authorization 头附加到请求。 - 券商凭据代理(TAP):将敏感密钥隔离在代理层,写操作需人工审批,读操作自动放行。

graph TB Client["客户端/浏览器"] --> API["FastAPI 服务<br/>安全中间件与路由"] API --> Auth["API 密钥校验<br/>跨站/CORS/CSP"] API --> SSE["SSE 票据<br/>短生命周期一次性令牌"] API --> Net["网络访问控制<br/>URL 目标校验/解析后校验"] API --> Sandbox["回测沙箱<br/>子进程+资源限制"] API --> TAP["TAP 凭据代理<br/>密钥隔离+人工审批"] Client --> FE["前端应用<br/>Authorization 头注入"]

图示来源 - agent/src/api/security.py:166-253 - agent/src/security/network.py:1-11 - agent/src/core/runner.py:1-200 - frontend/src/lib/apiAuth.ts:1-21 - README_zh.md:1313-1325

章节来源 - agent/src/api/security.py:166-253 - agent/src/security/network.py:1-11 - agent/src/core/runner.py:1-200 - frontend/src/lib/apiAuth.ts:1-21 - README_zh.md:1313-1325

核心组件

章节来源 - agent/src/api/security.py:343-504 - agent/src/api/security.py:571-622 - agent/src/security/network.py:1-11 - agent/tests/test_runner_env.py:188-318 - README_zh.md:1313-1325 - frontend/src/lib/apiAuth.ts:1-21

架构总览

下图展示从客户端到后端的安全链路,涵盖认证、流式票据、网络控制、沙箱执行与凭据代理。

sequenceDiagram participant C as "客户端" participant FE as "前端" participant API as "FastAPI 安全层" participant NET as "网络访问控制" participant SB as "回测沙箱" participant TAP as "TAP 凭据代理" C->>FE : 发起请求 FE->>API : 携带 Authorization 头 API->>API : 校验 API Key / 跨站/CORS/CSP alt 需要 SSE API-->>C : 返回一次性 ticket C->>API : 使用 ?ticket= 建立事件流 API->>API : 验证并消费 ticket end API->>NET : 校验外部 URL 目标与解析地址 NET-->>API : 允许/拒绝 API->>SB : 执行受限代码子进程+资源限制 API->>TAP : 需要券商密钥的写/读操作 TAP-->>API : 审批结果/转发结果 API-->>C : 安全响应含安全头

图示来源 - agent/src/api/security.py:343-504 - agent/src/api/security.py:571-622 - agent/src/security/network.py:1-11 - agent/src/core/runner.py:1-200 - README_zh.md:1313-1325

详细组件分析

API 密钥与跨站保护

flowchart TD Start(["请求进入"]) --> CheckMethod{"是否安全方法?"} CheckMethod --> |否| RejectCrossSite["拒绝跨站请求"] CheckMethod --> |是| CheckKey{"是否配置 API Key?"} CheckKey --> |是| ValidateToken["校验 Bearer/可选查询参数"] CheckKey --> |否| LocalCheck{"是否本地环回?"} LocalCheck --> |是| AllowLocal["允许本地访问"] LocalCheck --> |否| RequireKey["要求远程配置 API Key"] ValidateToken --> ApplyHeaders["附加安全响应头"] AllowLocal --> ApplyHeaders RequireKey --> Error["返回 401/403"] RejectCrossSite --> Error ApplyHeaders --> End(["响应"])

图示来源 - agent/src/api/security.py:343-504 - agent/src/api/security.py:235-253 - agent/src/api/security.py:260-283

章节来源 - agent/src/api/security.py:343-504 - agent/src/api/security.py:235-253 - agent/src/api/security.py:260-283

SSE 流式认证票据

sequenceDiagram participant FE as "前端" participant API as "安全层" FE->>API : POST 获取 ticket已认证 API-->>FE : 返回一次性 ticket FE->>API : GET /stream?ticket=... API->>API : 校验并消费 ticket API-->>FE : 建立 SSE 流

图示来源 - agent/src/api/security.py:300-341 - agent/src/api/security.py:591-622 - agent/tests/test_sse_ticket_and_headers.py:1-44

章节来源 - agent/src/api/security.py:300-341 - agent/src/api/security.py:591-622 - agent/tests/test_sse_ticket_and_headers.py:1-44

网络访问控制(SSRF 防护)

flowchart TD Req["外部 URL 请求"] --> ValidateTarget["校验目标地址"] ValidateTarget --> Resolve["解析为 IP/主机"] Resolve --> ValidateResolved["校验解析后地址"] ValidateResolved --> |允许| Fetch["发起网络请求"] ValidateResolved --> |拒绝| Block["拒绝访问"]

图示来源 - agent/src/security/network.py:1-11 - agent/src/channels/utils.py:1-200

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

代码沙箱与资源限制

flowchart TD Start(["提交代码"]) --> Spawn["创建子进程"] Spawn --> Env["注入允许的环境变量"] Spawn --> Home["预置安全 HOME"] Spawn --> RLimit["设置 RLIMIT_AS/NOFILE"] RLimit --> Run["执行受限代码"] Run --> Result{"成功/失败"} Result --> |成功| Output["输出结果"] Result --> |失败| Error["记录错误并终止"]

图示来源 - agent/src/core/runner.py:1-200 - agent/tests/test_runner_env.py:188-318

章节来源 - agent/src/core/runner.py:1-200 - agent/tests/test_runner_env.py:188-318

凭据代理(TAP)与权限控制

sequenceDiagram participant Agent as "Agent" participant TAP as "TAP 代理" participant Broker as "券商 API" Agent->>TAP : 请求账户/行情GET TAP-->>Agent : 返回数据自动放行 Agent->>TAP : 下单/撤单写操作 TAP-->>Agent : 等待人工审批 Note over TAP : 审批通过后注入真实密钥并转发 TAP->>Broker : 转发指令 Broker-->>TAP : 执行结果 TAP-->>Agent : 返回结果

图示来源 - README_zh.md:1313-1325 - README.md:1430-1452

章节来源 - README_zh.md:1313-1325 - README.md:1430-1452

前端凭证注入

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

依赖关系分析

graph LR Security["安全模块"] --> Config["配置访问器"] Security --> Headers["安全响应头"] Network["网络访问控制"] --> Utils["通道工具函数"] Runner["回测沙箱"] --> OS["操作系统资源限制"] Frontend["前端应用"] --> Security

图示来源 - agent/src/api/security.py:1-24 - agent/src/security/network.py:1-11 - agent/src/core/runner.py:1-200 - frontend/src/lib/apiAuth.ts:1-21

章节来源 - agent/src/api/security.py:1-24 - agent/src/security/network.py:1-11 - agent/src/core/runner.py:1-200 - frontend/src/lib/apiAuth.ts:1-21

性能与安全特性

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

故障排除指南

章节来源 - agent/src/api/security.py:434-504 - agent/src/api/security.py:591-622 - agent/src/security/network.py:1-11 - agent/tests/test_runner_env.py:188-318 - README_zh.md:1313-1325

结论

Vibe-Trading 在企业级安全方面实现了多层防护:严格的 API 密钥与跨站保护、一次性 SSE 票据、网络访问控制、代码沙箱与资源限制、凭据代理与人工审批、前端凭证注入与安全头。这些机制共同保障了系统在开放环境下的机密性、完整性与可用性,并为审计与合规提供了坚实基础。

[本节为总结,无需特定文件来源]

附录:合规与审计清单

[本节为通用清单,无需特定文件来源]