WebSocket内存马之tomcat-websocket源码实现(内存马系列篇七)

本文深入探讨了WebSocket协议在Tomcat中的实现,包括WebSocket的握手过程、优势,以及Tomcat如何通过SCI机制加载WebSocket服务。通过源码分析,揭示了Tomcat创建WsServerContainer对象、注册WebSocket服务的过程,为理解WebSocket内存马的原理奠定基础。
摘要由CSDN通过智能技术生成

写在前面

这篇主要是分析一下WebSocket协议在Tomcat容器中的源码实现,方便大家在后面能够更好的了解下一篇Websocket型内存马的原理。

这个也是内存马系列第七篇

Websocket

什么是websocket?

首先来了解一下什么是websocket

WebSocket全双工通信协议,在客户端和服务端建立连接后,可以持续双向通信,和HTTP同属于应用层协议,并且都依赖于传输层的TCP/IP协议。

虽然WebSocket有别于HTTP,是一种新协议,但是RFC 6455中规定:

it is designed to work over HTTP ports 80 and 443 as well as to support HTTP
proxies and intermediaries.

  • WebSocket通过HTTP端口80和443进行工作,并支持HTTP代理和中介,从而使其与HTTP协议兼容。

  • 为了实现兼容性,WebSocket握手使用HTTPUpgrade头从HTTP协议更改为WebSocket协议。

  • Websocket使用wswss的统一资源标志符(URI),分别对应明文和加密连接。

建立连接

在双向通信之前,必须通过握手建立连接。Websocket通过 HTTP/1.1
协议的101状态码进行握手,首先客户端(如浏览器)发出带有特殊消息头(Upgrade、Connection)的请求到服务器,服务器判断是否支持升级,支持则返回响应状态码101,表示协议升级成功,对于WebSocket就是握手成功。

请求头实例

GET /test HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: tFGdnEL/5fXMS9yKwBjllg==
Origin: http://example.com
Sec-WebSocket-Protocol: v10.stomp, v11.stomp, v12.stomp
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Version: 13
  • Connection必须设置Upgrade,表示客户端希望连接升级。

  • Upgrade: websocket表明协议升级为websocket。

  • Sec-WebSocket-Key字段内记录着握手过程中必不可少的键值,由客户端(浏览器)生成,可以尽量避免普通HTTP请求被误认为Websocket协议。

  • Sec-WebSocket-Version表示支持的Websocket版本。RFC6455要求使用的版本是13。

  • Origin字段是必须的。如果缺少origin字段,WebSocket服务器需要回复HTTP403状态码(禁止访问),通过Origin可以做安全校验。

响应头实例

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HaA6EjhHRejpHyuO0yBnY4J4n3A=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15
Sec-WebSocket-Protocol: v12.stomp

Sec-WebSocket-Accept的字段值是由握手请求中的Sec-WebSocket- Key

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值