websocket掩蔽的安全方面

websocket掩蔽的安全方面,websocket,Websocket,在实现websocket服务器时,我遇到了对客户端屏蔽数据的需求。我在谷歌上搜索为什么RFC中没有给出任何理由,并找到了这个答案(以及其他具有相同推理的答案): 一开始它是有道理的,所以我只是实施了它,但因为几乎没有什么比强制“安全”更让我讨厌的了,它仍然有点折磨着我,我最终得出了两个假设,我想知道这些假设是否属实: 因为它对客户端是唯一强制的,所以假设发生故障的代理或中间组件只关心客户端请求?或者说没有恶意服务器 它实际上并不是为了防止恶意参与者导致远程代码执行,而是为了防止好的客户机无意中

在实现websocket服务器时,我遇到了对客户端屏蔽数据的需求。我在谷歌上搜索为什么RFC中没有给出任何理由,并找到了这个答案(以及其他具有相同推理的答案):

一开始它是有道理的,所以我只是实施了它,但因为几乎没有什么比强制“安全”更让我讨厌的了,它仍然有点折磨着我,我最终得出了两个假设,我想知道这些假设是否属实:

  • 因为它对客户端是唯一强制的,所以假设发生故障的代理或中间组件只关心客户端请求?或者说没有恶意服务器
  • 它实际上并不是为了防止恶意参与者导致远程代码执行,而是为了防止好的客户机无意中导致代码执行而意外成为坏的参与者。如果我是一个坏演员,我只是要发送未屏蔽的数据或设置标志,即有效载荷被屏蔽,但不屏蔽它
我是否遗漏了任何可能导致这些假设错误的东西?

更大的问题——主要是确保WebSockets协议能够在不受阻碍的情况下通过现有的基础设施,并且不会造成意外损坏,例如缓存中毒或其他副作用

正如我所说,由于许多旧的中介机构不知道Websockets协议,看起来像HTTP请求的明文可能会被编辑或处理

例如,代理可能会删除它认为格式错误的HTTP请求(导致连接错误和数据丢失的非安全问题),或者缓存代理可能会缓存它认为有效GET请求的响应(导致缓存中毒,这是一个安全问题)

通过屏蔽客户端发送的文本(中间层可能认为是HTTP请求的文本),处理模式从明文“转移”到无法识别的字节,启动“传递”模式,而不是允许中间层像处理有效(或无效)HTTP一样“处理”数据

假设存在屏蔽错误(a
0000
mask/persistent mask),或者屏蔽数据看起来是恶意的,服务器将断开WebSocket,任何可能的攻击都将失败


假设屏蔽处理正确(数据被屏蔽),则响应不会被缓存或以其他方式被中介处理,因此无需浪费CPU周期屏蔽响应。

这是否意味着所有攻击场景都至少涉及来自服务器的一个响应?第一个未屏蔽的请求将由中介处理,然后再发送到可能断开连接的服务器。是。所有攻击向量都要求服务器使用WebSocket数据响应恶意构建的WebSocket数据包。然而,掩蔽所解决的一组可能的连接问题比一组可能的攻击向量要大。一般来说,中介机构是为处理恶意请求而设计的,而不是为处理“恶意”/损坏的响应而设计的。这听起来确实比我读过几遍的远程代码执行更合理,谢谢:)