关于websocket的掩码字段

use*_*548 2 protocols websocket

关于websocket协议,您可以从这里阅读详细信息,http://tools.ietf.org/html/rfc6455#section-5.3

在面具部分,它说:

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

我不明白为什么掩码键必须是不可预测的,更不用说掩码真的是必要的吗?因为你每次都发送它,嗅探器可以得到它并轻松解密它.我能想到的唯一有用的东西是它的首先使playload数据对人类不可读,并且花费更多时间让服务器处理接收

Len*_*ate 5

这与有效载荷数据的安全性无关,它使得数据发送方不可能预测出现在线路上的实际字节.

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

我们的想法是,由于生成WebSocket框架的API级别代码会选择一个屏蔽密钥并屏蔽应用程序代码提供的数据,因此应用程序代码无法以任何有意义的方式决定最终通过可能已损坏的中介的数据,因此不能造成麻烦.由于屏蔽密钥位于框架中,因此可以编写中介来理解和取消屏蔽数据,以便在需要时执行某种形式的巧妙检查.

这也说明了缺乏从服务器屏蔽客户的...我写了更多关于这在我的博客,在这里.