WebSocket 要单独查什么
WebSocket 建立长连接后不再走常规 HTTP 请求响应模型,因此常规的接口鉴权与 CORS 检查都不适用。核查四件事:握手阶段是否鉴权、是否校验 Origin(防跨站 WebSocket 劫持)、消息级是否按对象归属授权、是否强制 wss。最常见的问题是把权限校验只做在握手阶段,之后的消息按 ID 操作就不再做归属判断。
基本信息
| 适用平台 | 聊天、实时通知、协同编辑、行情推送类系统(RFC 6455) |
|---|---|
| 核查点 | 握手鉴权、Origin 校验、消息级授权、wss 强制 |
| 抓包方式 | 浏览器开发者工具的 WS 面板或中间代理 |
| 参考标准 | RFC 6455、OWASP WebSocket Security Cheat Sheet |
典型使用场景
- 实时消息类业务上线前的权限模型核查
- 排查“只测 HTTP 接口就漏掉”的越权路径
- 核查内嵌场景中 iframe 与主站之间的连接来源
- 评估断线重连与降级方案是否绕过了鉴权
- 检查 wss 强制与证书配置是否到位
检查步骤
检查步骤
1. 抓取 WebSocket 握手请求:确认鉴权方式(Cookie、Token、查询参数)与 Origin 校验行为
2. 改造 Origin 头重复发起握手,观察服务端是否拒绝
3. 用测试账号订阅后修改消息中的对象 ID,验证消息级归属授权
4. 尝试用 ws:// 明文连接,确认是否被强制跳转或拒绝
5. 记录端点、鉴权方式、消息格式与发现的权限盲区检查点与常见问题
| 检查点 | 期望实现 | 常见问题 |
|---|---|---|
| 握手鉴权 | 建立连接前校验凭证 | 连接匿名建立后再发 Token |
| Origin 校验 | 白名单来源,非法来源拒绝 | 完全不校验,任意站点可连 |
| 消息级授权 | 按会话主体核对对象归属 | 只校验连接,不校验每条消息 |
| 传输加密 | 强制 wss | 允许 ws 明文连接 |
| 连接资源控制 | 限制并发连接与消息频率 | 无限制导致资源耗尽 |
把浏览器不做 CORS 限制理解为“无需 Origin 校验”是常见误解:WebSocket 不受同源策略保护,服务端自己的来源校验才是唯一防线。
消息格式建议在文档中固定下来:二进制与文本混用、多种消息类型交织的实现最容易在权限校验上留下缺口。