2

关于 websocket 协议,您可以从这里阅读详细信息,https://www.rfc-editor.org/rfc/rfc6455#section-5.3

在面具部分,它说:

屏蔽密钥是客户端随机选择的 32 位值。
在准备屏蔽帧时,客户端必须
从允许的 32 位值集中选择一个新的屏蔽密钥。屏蔽键需要
是不可预测的;因此,掩码密钥必须来自强大的熵源,并且给定帧的掩码键不能
使服务器/代理很容易预测
后续帧的掩码键。屏蔽密钥的不可预测性
对于防止恶意应用程序的作者选择出现在线路上的字节至关重要。RFC 4086 [RFC4086] 讨论了什么需要为安全敏感的
应用程序提供合适的熵源。

我不明白为什么掩码密钥必须是不可预测的,更不用说这里真的需要掩码吗?因为你每次都发送它,嗅探器可以得到它并轻松解密它。我能想到的唯一有用的是它首先使播放负载数据对人类不可读,并且服务器需要更多时间来处理接收

4

1 回答 1

5

这与有效负载数据的安全性无关,而是使数据的发送者无法预测出现在网络上的实际字节。

需要屏蔽从客户端到服务器的 WebSocket 流量,因为恶意代码不太可能导致一些损坏的代理做错事并将其用作某种攻击。没有人证明这确实会发生,但由于它可能发生的事实足以让浏览器供应商感到紧张,因此添加了屏蔽以消除它被用作攻击的可能性。

这个想法是,由于生成 WebSocket 帧的 API 级别代码可以选择一个屏蔽键并屏蔽应用程序代码提供的数据,因此应用程序代码不能以任何有意义的方式指示最终通过可能损坏的中介的数据,因此不能惹麻烦。由于屏蔽键在帧中,因此可以编写中介来理解和取消屏蔽数据,以便在需要时执行某种形式的智能检查。

这也解释了从服务器到客户端缺乏屏蔽的原因......我在我的博客上写了更多关于这个的信息,这里

于 2013-08-17T17:33:56.817 回答