什么是在WebSocket的框架面具?(What is the mask in a WebSocke

2019-07-17 21:33发布

我工作的一个WebSocket的实现和不知道是什么面具的感觉是在框架中。

有人能解释我它做什么和为什么它是建议?

  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 ...                |
 +---------------------------------------------------------------+

Answer 1:

的WebSockets在RFC6455,在其中规定定义5.3节 :

掩蔽关键的不可预测性是必不可少的,以防止恶意应用程序的作者从选择出现在电线上的字节数。

在有关的WebSockets博客条目我发现了以下的解释:

屏蔽键(32位):如果屏蔽位被设置(相信我,这是你写的服务器端),你可以阅读这里的无符号字节,用于异或的有效载荷。 它被用来确保低劣的代理人无法通过从客户端攻击者滥用

但最清楚的回答我在发现邮件列表存档 。 还有约翰Tamplin规定:

基本上,的WebSockets是独一无二的,你需要保护网络基础设施,即使你有恶意代码在客户端运行的服务器,充满敌意的控制,你可以信任的唯一的一块是客户端浏览器。 通过使浏览器产生的每一帧随机面具,敌对客户端代码不能选择出现在电线用它来攻击脆弱的网络基础设施的字节模式

作为kmkaplan指出,攻击向量在描述第10.3节的RFC的。
这是为了防止代理缓存中毒攻击(见措施有关攻击的纸张 )。 它能做什么,是创造一些随机性。 你必须使用XOR随机屏蔽键的有效载荷。

顺便说一句:这不只是建议。 这是必须的



Answer 2:

从这篇文章 :

从客户端到服务器的WebSocket流量的屏蔽是必需的,因为不太可能的机会,恶意代码可能会导致一些破碎的代理做错误的事情,并以此作为某种类型的攻击。 没有人证明,这样做可能会发生,但由于事实上,它可能发生是有足够的理由为浏览器厂商获得颠簸,加入屏蔽删除它被用作攻击的可能性。

因此,假设攻击者能够危害在浏览器中执行,以及在后端服务器无论是JavaScript代码,屏蔽是为了防止这两个端点之间发送的字节序列中可能破坏任何损坏的代理一种特殊的方式被制作这两个端点之间(通过打破,这意味着可能会尝试在事实上,当他们不应该来解释的WebSocket流作为HTTP代理服务器)。

浏览器(而不是JavaScript代码在浏览器中)对用于发送这就是为什么它是不可能的攻击者知道代理可能会看到字节的最后流会是怎样的消息随机生成的面具说了算。

请注意,如果您的WebSocket流加密的面具是多余的(因为它应该是)。 文章从Python的烧瓶作者:

为什么会出现掩盖呢? 因为显然有足够的基础设施破那里,让升级头经过再处理的连接作为第二HTTP请求它然后充塞到高速缓存中的其余部分。 我对这个无以言表。 在任何情况下,针对防守基本上是一个强大的32位随机数作为掩蔽键。 或者你知道...使用TLS,不要使用低劣的代理。



文章来源: What is the mask in a WebSocket frame?