为什么websocket请求中的服务器必须回答质询?

为什么websocket请求中的服务器必须回答质询?,websocket,Websocket,我正在阅读websocket规范,它说: 最后,服务器必须向客户机证明它收到了 客户端的WebSocket握手,因此服务器不接受 非WebSocket连接的连接。这可以防止 攻击者通过小心地发送WebSocket服务器来阻止其欺骗- 使用| XMLHttpRequest |或|表单|提交精心编制的数据包 我已经读了好几遍了,但我仍然不清楚为什么这是必要的。我认为这是为了防止两件事 >P>重放攻击,中间人捕获包并试图重新发送到服务器,因为服务器将请求不同的挑战,从而拒绝连接。 Http post和

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

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


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

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

>P>重放攻击,中间人捕获包并试图重新发送到服务器,因为服务器将请求不同的挑战,从而拒绝连接

  • Http post和xmlhttp请求以启动web套接字的方式发送数据。这两个方法无法应答的事实意味着质询未被应答,套接字被服务器拒绝


  • 我开始回答你的问题,意识到我对这段话的理解没有我想象的那么好。当/如果我得到答案,我将进行更新。

    质询响应机制强制服务器确保客户端是合法的WebSocket客户端,而不是执行有趣操作的脚本

    质询在“Sec WebSocket密钥”HTTP头中发送。由于浏览器确保脚本不能设置“Sec-*”头,这会阻止脚本通过XMLHttpRequest打开WebSocket连接

    如果服务器不必回答这个问题,那么一些懒惰的服务器可能会完全忽略“Sec WebSocket-*”头,从而使客户端不受恶意脚本的保护


    这也可能是一种允许客户端验证它是否正在与WebSocket服务器通信的方法,但我认为这不是主要原因,因为服务器必须发送101交换协议状态代码以及“升级:WebSocket”头。

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


    这当然不能阻止恶意用户对开放式websocket服务器进行攻击,至少我不这么认为,但它可以阻止对非websocket服务器的攻击。

    我想听听关于这方面的质疑。我找不到任何原因。如果挑战是针对客户端的,那么这些都是有效的答案,但实际上挑战是由服务器来回答的。啊,我不知道XHR头上的“sec-*”限制,但在规范中是这样的:验证客户端是合法的WebSocket客户端而不是做有趣事情的脚本有什么意义?