为什么websocket请求中的服务器必须回答挑战



我正在阅读websocket规范,它说:

最后,服务器必须向客户端证明它收到了客户端的WebSocket握手,这样服务器就不会接受不是WebSocket连接的连接。这样可以防止攻击者通过小心发送WebSocket服务器来欺骗它-使用|XMLHttpRequest|或|form|提交精心编制的数据包。

我已经读了好几遍了,但我仍然不清楚为什么这是必要的。

质询-响应机制迫使服务器确保客户端是合法的WebSocket客户端,而不是做有趣事情的脚本。

质询以"Sec WebSocket Key"HTTP标头发送。由于浏览器确保脚本不能设置"Sec-*"头,这就阻止了脚本通过XMLHttpRequest打开WebSocket连接。

如果服务器不必回答这个问题,那么一些懒惰的服务器可能会完全忽略"Sec-Webocket-*"标头,从而使客户端不受流氓脚本的保护。

这也可能是一种允许客户端验证其是否正在与WebSocket服务器通信的方式,但我认为这不是主要原因,因为服务器无论如何都必须发送101交换协议状态代码,以及"Upgrade:WebSocket"标头。

我认为这是为了防止两件事。

  1. 回放攻击,中间的人捕获数据包,并试图将其重新发送到服务器,因为服务器将询问不同的挑战,从而拒绝连接

  2. Httppost和xmlhttp请求以启动web套接字的方式发送数据。事实上,这两种方法都不能回答,这意味着挑战没有得到回答,套接字被服务器拒绝

我开始回答你的问题,意识到我没有像想象的那样理解这段话,所以我要求澄清HyBi工作组列表。如果我得到答案,我会更新。

我认为一个主要原因是,例如,如果在流行网站中嵌入了websocket脚本,则可以防止对服务器的攻击。你可以把你的整个用户群变成一个不情愿的僵尸网络。

当然,这并不能阻止恶意人员对打开的websocket服务器进行攻击,至少我不认为,但它可以阻止对非websocket的服务器的攻击。

相关内容

  • 没有找到相关文章

最新更新