SuperAPI AI 工具集

websocket

安全与审计

查看项目

更新于 10-15 14:06

技能介绍

用途

本技能面向 WebSocket 安全,帮助开发者理解并防御持久化双向连接特有的漏洞。资料将 WebSocket 的风险等级标为 HIGH,理由是 WebSocket 连接绕过了同源策略(Same-Origin Policy)保护,容易受到跨站 WebSocket 劫持(CSWSH)攻击;持久连接需要谨慎处理认证、会话管理与输入校验。

主要能力

技能围绕以下核心专长展开:

  • CSWSH(跨站 WebSocket 劫持)防御
  • Origin 头校验与基于令牌的认证
  • 消息校验与逐消息授权
  • 速率限制与连接生命周期安全

资料给出的安全决策框架包括:新连接需校验 Origin 并要求认证令牌;每条消息需校验格式并检查操作授权;敏感操作需重新验证会话并记录日志;空闲连接在超时后关闭;错误条件下关闭连接并记录详情。

技术基础与版本建议

资料建议的组件版本为:FastAPI/Starlette 0.115+(WebSocket 支持)、websockets 12.0+(Python WebSocket 库)。

安全配置示例(保留原文):

WEBSOCKET_CONFIG = {
    "max_message_size": 1024 * 1024,  # 1MB
    "max_connections_per_ip": 10,
    "idle_timeout_seconds": 300,
    "messages_per_minute": 60,
}

# NEVER use "*" for origins
ALLOWED_ORIGINS = ["https://app.example.com", "https://admin.example.com"]

使用方式(TDD 工作流)

资料以测试驱动开发为主线,分为三步:

  1. 先写失败测试:覆盖安全边界(Origin 校验拒绝非法来源、认证必需、逐消息授权)。示例测试使用 pytest、httpx 的 AsyncClient/ASGITransport 与 FastAPI 的 TestClient。
  2. 实现最小通过代码:例如 validate_origin 函数,校验 websocket.headers.get("origin") 是否在允许列表中,否则以 4003 关闭。
  3. 重构与验证:运行 pytest tests/websocket/ -v --asyncio-mode=auto、bandit -r src/websocket/、pytest tests/ -v。

实现模式

资料提供五类实现模式:

  • Origin 校验(CSWSH 防御关键):在 @app.websocket("/ws") 端点中先校验 Origin,再 accept()。
  • 基于令牌的认证:通过 websocket.query_params.get("token") 获取令牌并用 JWT 解码验证,明确不使用 Cookie(Cookie 在 CSWSH 攻击中会被自动发送)。
  • 逐消息授权:用 Pydantic 模型校验 action 白名单(如 subscribe、unsubscribe、send、query),并检查 user.has_permission(f"ws:{message.action}")。
  • 带速率限制的连接管理器:SecureConnectionManager 跟踪连接数、每 IP 连接数与每分钟消息数。
  • 完整安全处理器:依次执行 Origin 校验、认证、连接、空闲超时接收、速率限制检查、消息处理,最后在 finally 中断开。

性能模式

资料列出五种性能模式:连接池复用、消息批量发送、二进制协议(如 struct.pack('!3f', ...))、自适应心跳、背压处理(有界队列 + asyncio.wait_for 超时)。

安全标准与案例

资料引用的 CVE 案例包括:CVE-2024-23898(Jenkins CSWSH,命令执行,HIGH)、CVE-2024-26135(MeshCentral CSWSH,配置泄露,HIGH)、CVE-2023-0957(Gitpod CSWSH,账户接管,CRITICAL)。并映射到 OWASP Top 10 的 A01 访问控制、A02 加密失败、A03 注入、A07 认证失败。

适用场景

适用于使用 FastAPI/Starlette 与 websockets 库构建 WebSocket 服务的开发者,尤其是需要防御 CSWSH、实现令牌认证、逐消息授权与速率限制的实时通信场景。

限制

资料未提供该技能的具体安装命令、收费方式、平台支持范围或实际效果数据,这些信息暂未提供。资料中的代码示例基于 Python 生态(FastAPI/Starlette、websockets、pytest、Pydantic、jose),未涉及其他语言或框架的实现。