什么是 webSocket?攻击面、安全风险与测试要点
用burp测试web应用的时候,proxy除了http/https 还有websockets。
websockets用来干啥的,安全风险何在,如何测试。试着说一下。。。。
1 细数 Websocket and HTTP
协议层面:HTTP vs WebSocket
- HTTP
- 基于请求-响应模型,客户端必须主动发起请求,服务器才能返回数据。
 - 每次请求独立,通常是短连接(HTTP/1.1 支持 Keep-Alive,但仍是请求驱动)。
 
 - WebSocket
- 在单个 TCP 连接上实现双向通信,握手完成后,客户端和服务器可互相主动发送消息,无需重复握手。
 - 有状态协议,连接保持打开,支持实时交互。
 
 
连接方式
- HTTP
- 每次请求都需完整 HTTP 报文头,开销大。
 
 - WebSocket
- 握手阶段通过 HTTP 协议升级(
Upgrade: websocket),之后切换到 WebSocket 协议。 - 通信时仅需轻量级帧结构,开销小。
 
 - 握手阶段通过 HTTP 协议升级(
 
典型使用场景
- HTTP:网页加载、API 调用、文件传输。
 - WebSocket:实时性要求高的应用,如:
- 聊天系统
 - 在线游戏
 - 股票行情推送
 - 协作编辑
 
 
如何加固第一步+s
- HTTP
- 可使用 HTTPS 加密,成熟度高,安全工具支持广泛。
 
 - WebSocket
- 可使用 WSS(WebSocket Secure),但安全测试工具支持较弱,渗透测试难度更高。
 
 
2 WebSocket 与 HTTP 的关系
- 相同点
- 都基于 TCP,都是应用层协议。
 
 - 不同点
- WebSocket 支持双向通信,HTTP 单向。
 - WebSocket 需握手建立连接。
 
 - 联系
- 握手阶段通过 HTTP,之后独立于 HTTP。
 
 
3 攻击面分析
根据 Black Hills Information Security 和 Web Security Academy 的研究,WebSocket 的攻击面包括:
- 协议降级攻击
- 将 WebSocket 降级为 HTTP,利用客户端库漏洞(如 socket.io)。
 
 - 握手中断
- 在 HTTP Upgrade 阶段进行拦截或篡改,导致连接失败或劫持。
 
 - 消息篡改与注入
- 利用缺乏严格验证的消息格式,进行 XSS、命令注入。
 
 - 认证与授权缺陷
- 长连接状态下,令牌过期处理不当,导致会话劫持。
 
 - DoS 攻击
- 利用持续连接消耗服务器资源。
 
 
安全测试要点
- 握手阶段
- 检查是否强制使用 WSS。
 - 验证 Upgrade 请求是否可被篡改。
 
 - 消息传输
- 测试输入验证,防止注入攻击。
 - 检查是否存在敏感信息明文传输。
 
 - 会话管理
- 确认令牌过期策略。
 - 测试断开连接后的状态清理。
 
 - 工具与资源
- https://portswigger.net/web-security/websockets
 - https://github.com/PalindromeLabs/awesome-websocket-security
 
 
总结
WebSocket 提供了高效的实时通信能力,但也带来了新的安全挑战。相比传统 HTTP,WebSocket 的攻击面更广,测试难度更高。安全团队应重点关注握手过程、消息验证、会话管理,并结合专业工具进行渗透测试。
