还简要介绍了针对WebSocket的安全攻击

时间:2019-10-08 20:37来源:计算机论坛
一、内容大概浏览 WebSocket的出现,使得浏览器材有了实时双向通讯的力量。本文由表及里,介绍了WebSocket怎么着创立连接、调换数据的内情,以及数据帧的格式。其余,还简单介绍了针

一、内容大概浏览

WebSocket的出现,使得浏览器材有了实时双向通讯的力量。本文由表及里,介绍了WebSocket怎么着创立连接、调换数据的内情,以及数据帧的格式。其余,还简单介绍了针对WebSocket的平安攻击,以及协调是怎么着抵挡类似攻击的。

八、Sec-WebSocket-Key/Accept的作用

前方提到了,Sec-WebSocket-Key/Sec-WebSocket-Accept在首要职能在于提供基础的防范,减少恶意连接、意外接二连三。

效率大概归咎如下:

  1. 幸免服务端收到不合规的websocket连接(比方http客商端比较大心央浼连接websocket服务,此时服务端能够直接拒绝连接)
  2. 保障服务端掌握websocket连接。因为ws握手阶段接纳的是http左券,因而或许ws连接是被三个http服务器处理并赶回的,此时客商端能够经过Sec-WebSocket-Key来保障服务端认知ws左券。(并不是百分之百保障,比如总是存在那多少个无聊的http服务器,光管理Sec-WebSocket-Key,但并从未落到实处ws公约。。。)
  3. 用浏览器里提倡ajax伏乞,设置header时,Sec-WebSocket-Key以及别的连锁的header是被明令防止的。这样能够制止客商端发送ajax恳求时,意外央浼左券晋级(websocket upgrade)
  4. 能够制止反向代理(不明了ws公约)重临错误的数码。比如反向代理前后收到三遍ws连接的进级诉求,反向代理把第一遍呼吁的归来给cache住,然后第二遍呼吁到来时一向把cache住的伏乞给重返(无意义的回到)。
  5. Sec-WebSocket-Key首要指标并非保证数量的安全性,因为Sec-WebSocket-Key、Sec-WebSocket-Accept的转换总计公式是公开的,何况特别轻易,最关键的法力是防止一些广泛的意料之外情状(非故意的)。

重申:Sec-WebSocket-Key/Sec-WebSocket-Accept 的折算,只好带来基本的保持,但连接是还是不是平安、数据是或不是平安、客户端/服务端是还是不是合法的 ws客商端、ws服务端,其实并不曾实际性的管教。

2、服务端:响应协议晋级

服务端重回内容如下,状态代码101表示左券切换。到此变成商业事务晋级,后续的多少交互都遵照新的情商来。

HTTP/1.1 101 Switching Protocols Connection:Upgrade Upgrade: websocket Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=

1
2
3
4
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=

备注:每个header都以rn末尾,而且最后一行加上一个杰出的空行rn。另外,服务端回应的HTTP状态码只可以在拉手阶段接纳。过了拉手阶段后,就只能利用一定的错误码。

WebSocket:5分钟从入门到明白

2018/01/08 · HTML5 · 1 评论 · websocket

最初的小讲出处: 技师小卡   

2、数据帧格式详解

本着前边的格式大概浏览图,这里每一种字段进行讲明,如有不清楚之处,可参照协议正式,或留言沟通。

FIN:1个比特。

一经是1,表示那是消息(message)的结尾一个分片(fragment),即使是0,表示不是是新闻(message)的尾声三个分片(fragment)。

RSV1, RSV2, RSV3:各占1个比特。

相似景况下全为0。当顾客端、服务端协商接纳WebSocket扩张时,那八个标记位能够非0,且值的含义由扩张举办定义。倘使出现非零的值,且并未接纳WebSocket扩展,连接出错。

Opcode: 4个比特。

操作代码,Opcode的值决定了应当什么解析后续的数额载荷(data payload)。若是操作代码是不认识的,那么接收端应该断开连接(fail the connection)。可选的操作代码如下:

  • %x0:表示壹个三回九转帧。当Opcode为0时,表示本次数据传输采纳了数量分片,当前摄取的数据帧为内部多个数据分片。
  • %x1:表示那是一个文本帧(frame)
  • %x2:表示那是多少个二进制帧(frame)
  • %x3-7:保留的操作代码,用于后续定义的非调整帧。
  • %x8:表示连接断开。
  • %x9:表示那是一个ping操作。
  • %xA:表示那是八个pong操作。
  • %xB-F:保留的操作代码,用于后续定义的调控帧。

Mask: 1个比特。

表示是或不是要对数码载荷进行掩码操作。从顾客端向服务端发送数据时,须求对数据开展掩码操作;从服务端向顾客端发送数据时,不须求对数据开展掩码操作。

只要服务端接收到的多寡未有开展过掩码操作,服务端须求断开连接。

设若Mask是1,那么在Masking-key中会定义一个掩码键(masking key),并用那个掩码键来对数码载荷举办反掩码。全部客商端发送到服务端的数据帧,Mask都以1。

掩码的算法、用途在下一小节批注。

Payload length:数据载荷的长度,单位是字节。为7位,或7+14人,或1+陆九个人。

假设数Payload length === x,如果

  • x为0~126:数据的长度为x字节。
  • x为126:后续2个字节代表三个拾肆位的无符号整数,该无符号整数的值为多少的尺寸。
  • x为127:后续8个字节代表多少个六二十个人的无符号整数(最高位为0),该无符号整数的值为多少的尺寸。

其他,假若payload length占用了七个字节的话,payload length的二进制表明选用网络序(big endian,主要的位在前)。

Masking-key:0或4字节(32位)

持有从顾客端传送到服务端的数据帧,数据载荷都进展了掩码操作,Mask为1,且教导了4字节的Masking-key。假若Mask为0,则未有Masking-key。

备考:载荷数据的长度,不满含mask key的尺寸。

Payload data:(x+y) 字节

载荷数据:蕴涵了扩张数据、应用数据。当中,扩大数据x字节,应用数据y字节。

推而广之数据:如果未有左券使用扩张的话,扩张数据数据为0字节。全部的庞大都必需声明扩大数据的长度,或许能够什么总括出恢弘数据的尺寸。另外,扩大怎么着使用必得在拉手阶段就合计好。如若扩张数据存在,那么载荷数据长度必得将增加数据的尺寸包涵在内。

运用数据:任性的施用数据,在扩大数据之后(借使存在扩大数据),占有了数据帧剩余的岗位。载荷数据长度 减去 扩张数据长度,就获得应用数据的尺寸。

2、客户端

代码如下,向8080端口发起WebSocket连接。连接构造建设后,打印日志,同时向服务端发送新闻。接收到来自服务端的音信后,一样打字与印刷日志。

1
 

1、数据分片

WebSocket的每条音信恐怕被切分成七个数据帧。当WebSocket的接收方收到贰个多少帧时,会基于FIN的值来判定,是或不是已经吸收接纳音信的末尾贰个数据帧。

FIN=1表示前段时间数据帧为音讯的最后四个数据帧,此时接收方已经收取完整的音信,能够对音讯举办拍卖。FIN=0,则接收方还亟需后续监听接收别的的数据帧。

此外,opcode在数据交流的景色下,表示的是数额的类别。0x01意味着文本,0x02代表二进制。而0x00相比奇特,表示三番两次帧(continuation frame),从名称想到所包含的意义,正是一体化消息对应的数据帧还没接过完。

3、Sec-WebSocket-Accept的计算

Sec-WebSocket-Accept依照顾客端恳求首部的Sec-WebSocket-Key总结出来。

总括公式为:

  1. Sec-WebSocket-Key258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼接。
  2. 经过SHA1计量出摘要,并转成base64字符串。

伪代码如下:

>toBase64( sha1( Sec-WebSocket-Key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 ) )

1
>toBase64( sha1( Sec-WebSocket-Key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 )  )

证实下前面的回到结果:

const crypto = require('crypto'); const magic = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; const secWebSocketKey = 'w4v7O6xFTi36lq3RNcgctw=='; let secWebSocketAccept = crypto.createHash('sha1') .update(secWebSocketKey + magic) .digest('base64'); console.log(secWebSocketAccept); // Oy4NRAQ13jhfONC7bP8dTKb4PTU=

1
2
3
4
5
6
7
8
9
10
const crypto = require('crypto');
const magic = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
const secWebSocketKey = 'w4v7O6xFTi36lq3RNcgctw==';
 
let secWebSocketAccept = crypto.createHash('sha1')
    .update(secWebSocketKey + magic)
    .digest('base64');
 
console.log(secWebSocketAccept);
// Oy4NRAQ13jhfONC7bP8dTKb4PTU=

1、客商端:申请公约晋级

第一,客户端发起公约进级央求。能够见到,采取的是行业内部的HTTP报文格式,且只帮衬GET方法。

GET / HTTP/1.1 Host: localhost:8080 Origin: Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==

1
2
3
4
5
6
7
GET / HTTP/1.1
Host: localhost:8080
Origin: http://127.0.0.1:3000
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==

根本呼吁首部意义如下:

  • Connection: Upgrade:表示要升级左券
  • Upgrade: websocket:表示要升高到websocket商讨。
  • Sec-WebSocket-Version: 13:表示websocket的版本。假诺服务端不援助该版本,须求回到二个Sec-WebSocket-Versionheader,里面包蕴服务端帮助的版本号。
  • Sec-WebSocket-Key:与背后服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防御,例如恶意的一连,只怕无意的接二连三。

小心,上边恳求省略了有的非入眼诉求首部。由于是标准的HTTP哀告,类似Host、Origin、库克ie等央浼首部会照常发送。在握手阶段,能够透过相关央求首部进行安全范围、权限校验等。

九、数据掩码的成效

WebSocket媾和中,数据掩码的功用是压实协商的安全性。但多少掩码而不是为着爱慕数量本人,因为算法本人是公开的,运算也不复杂。除了加密大道自己,如同从未太多一蹴而就的维护通讯安全的办法。

那么为何还要引进掩码计算呢,除了扩展计算机器的运算量外就如并未太多的收入(那也是非常多同学困惑的点)。

答案仍旧多个字:安全。但并不是为着防范数据泄密,而是为了防卫中期版本的商业事务中设有的代办缓存污染攻击(proxy cache poisoning attacks)等难题。

2、当前缓慢解决方案

开始时期的提案是对数据开展加密管理。基于安全、成效的设想,最后利用了折中的方案:对数据载荷举办掩码管理。

供给静心的是,这里只是限制了浏览器对数码载荷进行掩码管理,可是坏蛋完全能够兑现和睦的WebSocket客户端、服务端,不按法规来,攻击能够照常进行。

可是对浏览器加上那几个限制后,能够大大扩展攻击的难度,以及攻击的熏陶范围。若无这么些界定,只要求在英特网放个钓鱼网址骗人去做客,一下子就足以在长时间内开展大面积的抨击。

二、什么是WebSocket

HTML5起来提供的一种浏览器与服务器实行全双工通讯的网络本领,属于应用层合同。它依照TCP传输公约,并复用HTTP的抓手通道。

对大多数web开荒者来讲,上边这段描述有一点点枯燥,其实只要记住几点:

  1. WebSocket能够在浏览器里使用
  2. 扶助双向通讯
  3. 动用很简短

2、必要学习如何东西

对互联网应用层左券的读书来讲,最重大的频频正是一而再创设进度数据沟通教程。当然,数据的格式是逃不掉的,因为它平素调节了公约自己一个人的力量。好的多少格式能让契约更敏捷、扩张性更加好。

下文主要围绕上边几点举办:

  1. 怎么树立连接
  2. 什么交流数据
  3. 数量帧格式
  4. 哪些保持连接

三、入门例子

在正儿八经介绍公约细节前,先来看三个归纳的例子,有个直观感受。例子富含了WebSocket服务端、WebSocket客商端(网页端)。完整代码能够在 这里 找到。

这里服务端用了ws以此库。相比较我们熟稔的socket.iows福寿康宁更轻量,更相符学习的目标。

2、数据分片例子

直白看例子更形象些。上边例子来自MDN,能够很好地示范数据的分片。客户端向服务端两回发送消息,服务端收到消息后回应顾客端,这里最首要看顾客端往服务端发送的消息。

第一条新闻

FIN=1, 表示是眼前音讯的终极二个数据帧。服务端收到当前数据帧后,能够拍卖音讯。opcode=0x1,表示客商端发送的是文本类型。

第二条音信

  1. FIN=0,opcode=0x1,表示发送的是文本类型,且新闻还没发送完毕,还会有继续的数据帧。
  2. FIN=0,opcode=0x0,表示音讯还没发送完毕,还应该有继续的数据帧,当前的数据帧须求接在上一条数据帧之后。
  3. FIN=1,opcode=0x0,表示音讯一度发送完结,未有继续的数据帧,当前的数据帧必要接在上一条数据帧之后。服务端可以将关联的数据帧组装成完全的新闻。

Client: FIN=1, opcode=0x1, msg="hello" Server: (process complete message immediately) Hi. Client: FIN=0, opcode=0x1, msg="and a" Server: (listening, new message containing text started) Client: FIN=0, opcode=0x0, msg="happy new" Server: (listening, payload concatenated to previous message) Client: FIN=1, opcode=0x0, msg="year!" Server: (process complete message) Happy new year to you too!

1
2
3
4
5
6
7
8
Client: FIN=1, opcode=0x1, msg="hello"
Server: (process complete message immediately) Hi.
Client: FIN=0, opcode=0x1, msg="and a"
Server: (listening, new message containing text started)
Client: FIN=0, opcode=0x0, msg="happy new"
Server: (listening, payload concatenated to previous message)
Client: FIN=1, opcode=0x0, msg="year!"
Server: (process complete message) Happy new year to you too!

3、运转结果

可分别查看服务端、顾客端的日记,这里不开展。

服务端输出:

server: receive connection. server: received hello

1
2
server: receive connection.
server: received hello

客商端输出:

client: ws connection is open client: received world

1
2
client: ws connection is open
client: received world

十、写在后头

WebSocket可写的事物还挺多,举例WebSocket扩大。客商端、服务端之间是什么样协商、使用扩张的。WebSocket扩展能够给左券本人扩大非常多力量和虚拟空间,举例数据的压缩、加密,以及多路复用等。

篇幅所限,这里先不实行,感兴趣的同桌能够留言沟通。作品如有错漏,敬请提出。

七、连接保持+心跳

WebSocket为了保证客商端、服务端的实时双向通讯,必要保障客商端、服务端之间的TCP通道保持延续未有断开。不过,对于长日子尚无多少往来的接连,若是照旧长日子维系着,也许会浪费富含的一连能源。

但不消除有个别场景,客户端、服务端就算长日子从没数据往来,但仍急需保持三番五次。今年,可以采纳心跳来完结。

  • 发送方->接收方:ping
  • 接收方->发送方:pong

ping、pong的操作,对应的是WebSocket的多少个调整帧,opcode分别是0x90xA

例如,WebSocket服务端向顾客端发送ping,只要求如下代码(选用ws模块)

ws.ping('', false, true);

1
ws.ping('', false, true);

1、代理缓存污染攻击

下边摘自二〇〇七年有关安全的一段讲话。在那之中提到了代理服务器在研商落实上的久治不愈的病魔或许导致的安全难题。撞击出处。

“We show, empirically, that the current version of the WebSocket consent mechanism is vulnerable to proxy cache poisoning attacks. Even though the WebSocket handshake is based on HTTP, which should be understood by most network intermediaries, the handshake uses the esoteric “Upgrade” mechanism of HTTP [5]. In our experiment, we find that many proxies do not implement the Upgrade mechanism properly, which causes the handshake to succeed even though subsequent traffic over the socket will be misinterpreted by the proxy.”[TALKING] Huang, L-S., Chen, E., Barth, A., Rescorla, E., and C.

Jackson, "Talking to Yourself for Fun and Profit", 2010,

1
          Jackson, "Talking to Yourself for Fun and Profit", 2010,

在正规描述攻击步骤此前,我们尽管有如下参加者:

  • 攻击者、攻击者本人决定的服务器(简称“邪恶服务器”)、攻击者伪造的能源(简称“邪恶能源”)
  • 被害人、受害者想要访谈的能源(简称“正义能源”)
  • 被害者实际想要访谈的服务器(简称“正义服务器”)
  • 高级中学档代理服务器

攻击步骤一:

  1. 攻击者浏览器 向 严酷服务器 发起WebSocket连接。依照前文,首先是叁个说道进级央浼。
  2. 和谐升级央求 实际达到 代理服务器
  3. 代理服务器 将协商晋级乞请转发到 暴虐服务器
  4. 粗暴服务器 同意连接,代理服务器 将响应转载给 攻击者

出于 upgrade 的贯彻上有缺欠,代理服务器 认为此前转载的是惯常的HTTP音信。因而,当共谋服务器 同意连接,代理服务器 认为这一次对话已经终结。

攻击步骤二:

  1. 攻击者 在头里创建的一连上,通过WebSocket的接口向 凶恶服务器 发送数据,且数额是精心组织的HTTP格式的公文。当中蕴涵了 正义财富 的地方,以及四个伪造的host(指向公而忘私服务器)。(见前面报文)
  2. 恳请达到 代理服务器 。固然复用了事先的TCP连接,但 代理服务器 感到是新的HTTP乞请。
  3. 代理服务器凶残服务器 请求 残暴财富
  4. 阴毒服务器 返回 凶残能源代理服务器 缓存住 凶暴财富(url是对的,但host是 公平服务器 的地址)。

到这里,受害者能够上台了:

  1. 受害者 通过 代理服务器 访问 公平服务器公允能源
  2. 代理服务器 检查该能源的url、host,发现地面有一份缓存(伪造的)。
  3. 代理服务器严酷财富 返回给 受害者
  4. 受害者 卒。

附:前边提到的细致布局的“HTTP乞求报文”。

Client → Server: POST /path/of/attackers/choice HTTP/1.1 Host: host-of-attackers-choice.com Sec-WebSocket-Key: Server → Client: HTTP/1.1 200 OK Sec-WebSocket-Accept:

1
2
3
4
5
Client → Server:
POST /path/of/attackers/choice HTTP/1.1 Host: host-of-attackers-choice.com Sec-WebSocket-Key:
Server → Client:
HTTP/1.1 200 OK
Sec-WebSocket-Accept:

十一、相关链接

RFC6455:websocket规范
https://tools.ietf.org/html/r…

业内:数据帧掩码细节
https://tools.ietf.org/html/r…

正式:数据帧格式
https://tools.ietf.org/html/r…

server-example
https://github.com/websockets…

编写websocket服务器
https://developer.mozilla.org…

对互连网基础设备的攻击(数据掩码操作所要防范的事体)
https://tools.ietf.org/html/r…

Talking to Yourself for Fun and Profit(含有攻击描述)
http://w2spconf.com/2011/pape…

What is Sec-WebSocket-Key for?
https://stackoverflow.com/que…

10.3. Attacks On Infrastructure (Masking)
https://tools.ietf.org/html/r…

Talking to Yourself for Fun and Profit
http://w2spconf.com/2011/pape…

Why are WebSockets masked?
https://stackoverflow.com/que…

How does websocket frame masking protect against cache poisoning?
https://security.stackexchang…

What is the mask in a WebSocket frame?
https://stackoverflow.com/que…

1 赞 3 收藏 1 评论

图片 1

六、数据传递

借使WebSocket客商端、服务端创设连接后,后续的操作皆以依据数据帧的传递。

WebSocket根据opcode来分别操作的品类。比方0x8代表断开连接,0x00x2意味着数据交互。

3、掩码算法

掩码键(Masking-key)是由客商端挑选出去的三13位的随机数。掩码操作不会影响多少载荷的长度。掩码、反掩码操作都应用如下算法:

首先,假设:

  • original-octet-i:为原来数据的第i字节。
  • transformed-octet-i:为转移后的数额的第i字节。
  • j:为i mod 4的结果。
  • masking-key-octet-j:为mask key第j字节。

算法描述为: original-octet-i 与 masking-key-octet-j 异或后,获得transformed-octet-i。

j = i MOD 4
transformed-octet-i = original-octet-i XOR masking-key-octet-j

1、服务端

代码如下,监听8080端口。当有新的连日央浼到达时,打字与印刷日志,同一时候向客户端发送新闻。当接过到来自顾客端的音讯时,同样打印日志。

var app = require('express')(); var server = require('http').Server(app); var WebSocket = require('ws'); var wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', function connection(ws) { console.log('server: receive connection.'); ws.on('message', function incoming(message) { console.log('server: received: %s', message); }); ws.send('world'); }); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); app.listen(3000);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var app = require('express')();
var server = require('http').Server(app);
var WebSocket = require('ws');
 
var wss = new WebSocket.Server({ port: 8080 });
 
wss.on('connection', function connection(ws) {
    console.log('server: receive connection.');
    
    ws.on('message', function incoming(message) {
        console.log('server: received: %s', message);
    });
 
    ws.send('world');
});
 
app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});
 
app.listen(3000);

1、有怎么着亮点

提及优点,这里的自己检查自纠参照物是HTTP公约,回顾地说正是:援助双向通讯,越来越灵敏,更火速,可扩大性更加好。

  1. 协助双向通讯,实时性更加强。
  2. 越来越好的二进制辅助。
  3. 少之又少的垄断(monopoly)支出。连接创立后,ws顾客端、服务端进行数据调换时,公约决定的数码咸阳部十分小。在不含有头部的动静下,服务端到客商端的新乡唯有2~10字节(决计于数量包长度),客商端到服务端的来讲,需求加上额外的4字节的掩码。而HTTP公约每次通信都亟需指点完整的底部。
  4. 支撑扩展。ws共同商议定义了扩展,顾客能够扩展合同,只怕完毕自定义的子左券。(例如辅助自定义压缩算法等)

对此背后两点,未有色金属研商所究过WebSocket左券正式的同学只怕知道起来非常不足直观,但不影响对WebSocket的学习和行使。

四、怎么着创建连接

前面提到,WebSocket复用了HTTP的握手通道。具体指的是,客商端通过HTTP诉求与WebSocket服务端协商晋级合同。左券进级成功后,后续的数据调换则依据WebSocket的构和。

五、数据帧格式

顾客端、服务端数据的交流,离不开数据帧格式的概念。因而,在实质上批注数据调换从前,大家先来看下WebSocket的多少帧格式。

WebSocket客户端、服务端通讯的小不点儿单位是帧(frame),由1个或多个帧组成一条完整的新闻(message)。

  1. 出殡端:将新闻切割成多少个帧,并发送给服务端;
  2. 接收端:接收音讯帧,并将关乎的帧重新组装成完全的新闻;

本节的主要,就是教学数据帧的格式。详细定义可参谋 RFC6455 5.2节 。

1、数据帧格式大概浏览

上边给出了WebSocket数据帧的统一格式。熟识TCP/IP左券的同核对如此的图应该不生分。

  1. 从左到右,单位是比特。比方FINRSV1各占据1比特,opcode占据4比特。
  2. 内容包涵了标志、操作代码、掩码、数据、数据长度等。(下一小节博览会开)

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (16/64) | |N|V|V|V| |S| | (if payload len==126/127) | | |1|2|3| |K| | | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - -

          • | Extended payload length continued, if payload len == 127 | +
              • - - - - - - - - - +-------------------------------+ | |Masking-key, if MASK set to 1 | +-------------------------------+-------------------------------+ | Masking-key (continued) | Payload Data | +-------------------------------- - - - - - - - - - - - - - - - + : Payload Data continued ... : + - - - - - - - - - - - - - - - - - - - - -
              • - - - - + | Payload Data continued ... | +---------------------------------------------------------------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |    Extended payload length    |
|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
|N|V|V|V|       |S|             |   (if payload len==126/127)   |
| |1|2|3|       |K|             |                               |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|     Extended payload length continued, if payload len == 127  |
+ - - - - - - - - - - - - - - - +-------------------------------+
|                               |Masking-key, if MASK set to 1  |
+-------------------------------+-------------------------------+
| Masking-key (continued)       |          Payload Data         |
+-------------------------------- - - - - - - - - - - - - - - - +
:                     Payload Data continued ...                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|                     Payload Data continued ...                |
+---------------------------------------------------------------+

编辑:计算机论坛 本文来源:还简要介绍了针对WebSocket的安全攻击

关键词: