关于websocket的掩码字段

时间:2013-08-17 08:52:31

标签: websocket protocols

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

在面具部分,它说:

  

屏蔽密钥是客户端随机选择的32位值   在准备蒙面框架时,客户必须选择新的遮蔽框   来自允许的32位值的密钥。掩蔽键需要
  不可预测;因此,掩蔽密钥必须来自强大的   熵源和给定​​帧的掩蔽密钥绝不能   使服务器/代理能够简单地预测中的屏蔽密钥   后续帧。掩蔽键的不可预测性是
  防止恶意应用程序的作者选择的必要条件   线上出现的字节。 RFC 4086 [RFC4086]讨论了什么   为安全敏感的事物提供合适的熵源   应用

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

1 个答案:

答案 0 :(得分:5)

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

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

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

这也解释了从服务器到客户端缺乏屏蔽......我在我的博客here上写了更多相关内容。