旧的和被取代的WebSocket规范草案75没有指定HTTP请求标头Sec-WebSocket-Key1和Sec-WebSocket-Key2。为什么最新的草案包括这些,以及增加安全性的内容?
答案 0 :(得分:7)
这是我能想到的:这些新字段可以防止跨协议攻击。我们假设某些恶意JavaScript在Web浏览器中运行,尝试连接到非HTTP,非WebSocket服务器(例如FTP,telnet,SSH)。对于草案75,握手只包括发送WebSocket握手头的客户端,而服务器则没有回复。之后,客户端可以发送\x00...\xFF
框架消息。因此,客户端中的恶意JavaScript代码将能够连接到非WebSocket服务器(例如telnet),尝试登录并在那里运行命令。在引入 Sec-WebSocket-Key1 之后,除非服务器返回 Sec-WebSocket-Key1 等的MD5校验和,否则WebSocket连接尝试将失败。强制非WebSocket (例如telnet)服务器这样做几乎是不可能的,特别是因为JavaScript代码无法控制 Sec-WebSocket-Key1 等。