【发布时间】:2010-08-29 15:11:50
【问题描述】:
旧的和被取代的 WebSocket 规范草案 75 没有指定 HTTP 请求标头 Sec-WebSocket-Key1 和 Sec-WebSocket-Key2。为什么最新的草案包括这些,以及在提高安全性方面的哪些方面?
【问题讨论】:
旧的和被取代的 WebSocket 规范草案 75 没有指定 HTTP 请求标头 Sec-WebSocket-Key1 和 Sec-WebSocket-Key2。为什么最新的草案包括这些,以及在提高安全性方面的哪些方面?
【问题讨论】:
这是我能想到的:这些新字段用于防止跨协议攻击。让我们假设一些恶意 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 等。
【讨论】: