安全测试

📎 引用文件

本文引用的文件 - agent/src/security/scanner.py - agent/src/security/network.py - agent/src/security/workspace_access.py - agent/src/api/security.py - agent/src/tools/path_utils.py - agent/tests/test_backtest_runner_security.py - agent/tests/test_file_tool_sandbox_security.py - agent/tests/test_security_scanner.py - agent/tests/test_security_auth_api.py - agent/tests/test_special_token_neutralization.py - agent/tests/test_sse_ticket_and_headers.py

目录

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

简介

本文件面向 Vibe-Trading 的安全测试,覆盖以下关键主题: - 安全漏洞扫描:外部内容注入检测、特殊控制令牌中和、敏感信息泄露提示。 - 权限验证测试:API 鉴权、回环/跨站请求防护、SSE 票据机制。 - 输入验证测试:路径沙箱、运行目录白名单、参数校验。 - 沙箱执行测试:回测执行器代码注入防护、工具沙箱边界。 - 数据泄露防护:日志脱敏、CORS/CSP 策略、网络目标校验。 - 认证授权与会话安全:Bearer 鉴权、单票票据、跨站浏览器请求拒绝。 - 自动化与审计:回归测试、报告生成、合规检查建议。

项目结构

围绕安全能力,仓库在 agent 层提供了安全模块与大量安全回归测试: - 安全能力 - 注入扫描与内容中和:scanner.py - 网络目标校验桥接:network.py - 工作区范围异常定义:workspace_access.py - API 鉴权、CORS/CSP、DNS 重绑定防护、SSE 票据:api/security.py - 文件路径沙箱与白名单:tools/path_utils.py - 安全测试 - 回测执行器安全:test_backtest_runner_security.py - 文件工具沙箱安全:test_file_tool_sandbox_security.py - 注入扫描与内容过滤:test_security_scanner.py、test_special_token_neutralization.py - 认证授权与 SSE:test_security_auth_api.py、test_sse_ticket_and_headers.py

graph TB subgraph "安全能力" A["注入扫描<br/>scanner.py"] B["网络目标校验<br/>network.py"] C["工作区范围异常<br/>workspace_access.py"] D["API 鉴权/安全头/SSE<br/>api/security.py"] E["路径沙箱/白名单<br/>tools/path_utils.py"] end subgraph "安全测试" T1["回测执行器安全<br/>test_backtest_runner_security.py"] T2["文件工具沙箱安全<br/>test_file_tool_sandbox_security.py"] T3["注入扫描测试<br/>test_security_scanner.py"] T4["特殊令牌中和测试<br/>test_special_token_neutralization.py"] T5["认证授权与 SSE 测试<br/>test_security_auth_api.py"] T6["SSE 票据与安全头测试<br/>test_sse_ticket_and_headers.py"] end T1 --> D T2 --> E T3 --> A T4 --> A T5 --> D T6 --> D A --> B A --> E

图示来源 - agent/src/security/scanner.py:1-264 - agent/src/security/network.py:1-11 - agent/src/security/workspace_access.py:1-15 - agent/src/api/security.py:1-670 - agent/src/tools/path_utils.py:1-404

章节来源 - agent/src/security/scanner.py:1-264 - agent/src/security/network.py:1-11 - agent/src/security/workspace_access.py:1-15 - agent/src/api/security.py:1-670 - agent/src/tools/path_utils.py:1-404

核心组件

章节来源 - agent/src/security/scanner.py:16-220 - agent/src/api/security.py:69-253 - agent/src/api/security.py:300-622 - agent/src/tools/path_utils.py:46-240

架构总览

下图展示了从外部输入到安全边界的处理流程:外部内容经注入扫描与令牌中和后进入下游;API 请求先经过 DNS 重绑定与 CORS/CSP 校验,再进行鉴权;文件操作走路径沙箱与白名单校验。

sequenceDiagram participant U as "调用方" participant API as "API 鉴权与安全头<br/>api/security.py" participant SCAN as "注入扫描/令牌中和<br/>scanner.py" participant FS as "路径沙箱/白名单<br/>path_utils.py" participant APP as "业务逻辑" U->>API : "HTTP 请求(含Host/Origin)" API->>API : "CORS/CSP/DNS重绑定校验" API-->>U : "安全响应头" API->>APP : "鉴权通过后进入路由" APP->>SCAN : "处理外部内容(网页/文档/搜索)" SCAN-->>APP : "带 security_warnings 的结果" APP->>FS : "读写/编辑文件" FS-->>APP : "允许或拒绝(越界/UNC)" APP-->>U : "最终结果"

图示来源 - agent/src/api/security.py:166-253 - agent/src/security/scanner.py:145-220 - agent/src/tools/path_utils.py:185-240

详细组件分析

组件A:注入扫描与内容过滤

flowchart TD Start(["入口"]) --> Scan["扫描外部文本"] Scan --> Match{"命中规则?"} Match -- 否 --> Neutralize["中和特殊令牌"] Match -- 是 --> Warn["记录告警(含field/规则/严重级别)"] --> Neutralize Neutralize --> Return["返回带 security_warnings 的载荷"]

图示来源 - agent/src/security/scanner.py:145-220

章节来源 - agent/src/security/scanner.py:16-220 - agent/tests/test_security_scanner.py:17-108 - agent/tests/test_special_token_neutralization.py:20-38

组件B:API 鉴权、CORS/CSP 与 SSE 票据

sequenceDiagram participant B as "浏览器" participant S as "API 服务器<br/>api/security.py" participant K as "票据服务(内存)" B->>S : "POST /auth/sse-ticket (Bearer)" S->>K : "签发一次性票据" K-->>S : "ticket" S-->>B : "返回 ticket" B->>S : "GET /sessions/{id}/events?ticket=..." S->>K : "消费并失效票据" K-->>S : "有效/无效" S-->>B : "建立事件流或 401"

图示来源 - agent/src/api/security.py:300-340 - agent/src/api/security.py:591-622

章节来源 - agent/src/api/security.py:69-253 - agent/src/api/security.py:300-622 - agent/tests/test_security_auth_api.py:43-224 - agent/tests/test_security_auth_api.py:414-449 - agent/tests/test_sse_ticket_and_headers.py:161-194

组件C:路径沙箱与文件工具安全

flowchart TD In["输入路径 + run_dir"] --> CheckRun{"run_dir 存在?"} CheckRun -- 是 --> TryRun["safe_path(file, run_dir)"] TryRun --> RunOK{"是否越界?"} RunOK -- 否 --> Out["返回绝对路径"] RunOK -- 是 --> Fallback["尝试 allowed_write_roots"] Fallback --> Found{"是否在允许根?"} Found -- 是 --> Out Found -- 否 --> Err["抛出错误(越界/需run_dir)"] CheckRun -- 否 --> Direct["直接校验 allowed_*_roots"] Direct --> Found

图示来源 - agent/src/tools/path_utils.py:185-240 - agent/src/tools/path_utils.py:243-404

章节来源 - agent/src/tools/path_utils.py:46-240 - agent/tests/test_file_tool_sandbox_security.py:21-165

组件D:回测执行器安全性(代码注入防护)

flowchart TD Load["加载策略模块"] --> Walk["AST 遍历与方法体可达性分析"] Walk --> Detect{"发现危险节点?"} Detect -- 是 --> Reject["拒绝并报错"] Detect -- 否 --> Allow["允许执行"]

图示来源 - agent/tests/test_backtest_runner_security.py:17-725

章节来源 - agent/tests/test_backtest_runner_security.py:17-725

组件E:网络通信安全与 SSRF 防护

章节来源 - agent/src/security/network.py:1-11 - agent/src/api/security.py:180-253 - agent/tests/test_sse_ticket_and_headers.py:161-194

依赖关系分析

graph LR API["api/security.py"] --> CFG["config.accessor"] API --> SECHEAD["安全头/鉴权"] PATH["tools/path_utils.py"] --> CFG SCAN["security/scanner.py"] --> NONE["无外部依赖"]

图示来源 - agent/src/api/security.py:1-670 - agent/src/tools/path_utils.py:1-404 - agent/src/security/scanner.py:1-264

章节来源 - agent/src/api/security.py:1-670 - agent/src/tools/path_utils.py:1-404 - agent/src/security/scanner.py:1-264

性能与安全特性

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

故障排查指南

章节来源 - agent/tests/test_security_auth_api.py:237-340 - agent/tests/test_file_tool_sandbox_security.py:46-165 - agent/tests/test_security_scanner.py:17-108

结论

Vibe-Trading 在安全方面形成了“扫描—鉴权—沙箱—审计”的闭环: - 外部内容注入通过模式扫描与令牌中和降低风险。 - API 层通过严格鉴权、CORS/CSP、DNS 重绑定防护与 SSE 票据保障通信安全。 - 文件与运行目录通过白名单与路径沙箱限制执行面。 - 回测执行器采用 AST 级静态分析与可达性检查,阻断代码注入。 - 丰富的回归测试覆盖常见攻击面,便于持续集成与快速修复。

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

附录:合规与自动化

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