跨站WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)是WebSocket应用最常见的安全漏洞之一。其原理类似于跨站请求伪造(CSRF):攻击者在恶意网页中嵌入JavaScript代码,诱使用户访问,该代码会尝试与受害者的WebSocket服务器建立连接。由于浏览器会自动携带目标域名的Cookie,如果服务端仅依赖Cookie进行身份认证,且没有验证Origin头,那么攻击者就可以劫持用户的合法会话,读取或伪造WebSocket消息。防范CSWSH的关键措施包括:在握手阶段严格校验Origin头(只允许白名单中的域名)、使用一次性短期令牌(而非长期Cookie)进行身份认证、在令牌中绑定用户IP和User-Agent信息以防止重放攻击。根据OWASP 2026年指南,建议使用SameSite cookies(SameSite=Lax或Strict)来防止跨站Cookie传输,并加强CSWSH防御。
如果服务端没有对客户端发送的WebSocket 消息进行严格的输入验证,攻击者可能通过构造恶意消息来实施注入攻击。例如,在聊天应用中,如果服务端直接将从WebSocket消息中读取的用户名和消息内容拼接成HTML并广播给所有客户端,就可能引发存储型XSS攻击。防范这类漏洞的措施包括:对所有接收到的消息内容执行严格的输入验证和输出转义、使用安全的JSON解析库(避免反序列化漏洞)、限制消息的最大长度以防止内存耗尽攻击(DoS)、为消息格式定义严格的模式(Schema)并拒绝所有不符合模式的消息。
WebSocket 长连接特性使得它容易成为拒绝服务攻击的目标。攻击者可以创建大量WebSocket连接(连接洪水攻击),占用服务器的内存和文件描述符资源,导致合法用户无法建立连接。此外,攻击者还可以在单个连接中高速发送大量消息(消息洪水攻击),耗尽服务器的CPU资源来处理这些消息。防范措施包括:在握手阶段执行严格的身份认证(防止攻击者轻易创建大量连接)、限制单个IP地址的最大并发连接数、限制单个连接的单位时间消息发送频率(使用令牌桶算法)、在公网前端部署DDoS防护服务(如腾讯云DDoS防护)来过滤恶意流量、设置连接空闲超时(如300秒无活动则自动断开)来清理僵死连接。