关于websocket的掩码字段

关于websocket的掩码字段,websocket,protocols,Websocket,Protocols,关于websocket协议,您可以从这里阅读详细信息 在面具部分,它说: 屏蔽密钥是由客户端随机选择的32位值。 准备蒙版框架时,客户必须选择新的蒙版 来自允许的32位值集的键。屏蔽键需要 变幻莫测;因此,屏蔽密钥必须从强 熵源,并且给定帧的掩蔽键不能 使服务器/代理能够简单地预测 后续帧。屏蔽键的不可预测性是 防止恶意应用程序的作者选择 出现在导线上的字节。RFC 4086[RFC4086]讨论了 需要一个合适的熵源,用于安全敏感 应用程序 我不明白为什么掩码密钥必须是不可预测的,更不用说掩码

关于websocket协议,您可以从这里阅读详细信息

在面具部分,它说:

屏蔽密钥是由客户端随机选择的32位值。 准备蒙版框架时,客户必须选择新的蒙版 来自允许的32位值集的键。屏蔽键需要 变幻莫测;因此,屏蔽密钥必须从强 熵源,并且给定帧的掩蔽键不能 使服务器/代理能够简单地预测 后续帧。屏蔽键的不可预测性是 防止恶意应用程序的作者选择 出现在导线上的字节。RFC 4086[RFC4086]讨论了 需要一个合适的熵源,用于安全敏感 应用程序


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

这与有效负载数据的安全无关,而是使数据发送方无法预测出现在线路上的实际字节数

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

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


这也解释了从服务器到客户端缺少屏蔽的原因。。。我在我的博客上写了更多

我读了你的博客,读了相关的链接,我仍然不能真正理解屏蔽的意义,我不太明白他们在说什么,比如透明代理,路由,就像软件开发的另一个领域,但我有一种感觉,在协议中有一些很棒的设计思想,或者不是很好,但是你可以从中吸取教训,有一天我可以在我的工作中使用它们。如果有人能用一种流行的方式解释它,更多的人可以从中受益。无论如何,感谢你的帖子:我认为掩蔽的意义在于掩蔽没有意义;依我拙见