10

旧的和被取代的 WebSocket 规范草案 75 没有指定 HTTP 请求标头 Sec-WebSocket-Key1 和 Sec-WebSocket-Key2。为什么最新的草案包括这些,以及在提高安全性方面是什么?

4

1 回答 1

8

这是我能想到的:这些新字段是为了防止跨协议攻击。让我们假设一些恶意 JavaScript 在 Web 浏览器中运行,试图连接到非 HTTP、非 WebSocket 服务器(例如 FTP、telnet、SSH)。在草案 75 中,握手仅包括客户端发送 WebSocket 握手标头,而服务器则无响应。之后,客户端可以发送\x00...\xFF框架消息。因此,客户端中的恶意 JavaScript 代码将能够连接到非 WebSocket 服务器(例如 telnet),尝试登录并在那里运行命令。Sec-WebSocket-Key1引入后,WebSocket 连接尝试将失败,除非服务器返回 Sec-WebSocket-Key1 的 MD5校验等。强制非 WebSocket(例如 telnet)服务器这样做几乎是不可能的,特别是因为 JavaScript 代码无法控制Sec-WebSocket-Key1等。

于 2010-08-29T16:20:50.533 回答