旧的和被取代的 WebSocket 规范草案 75 没有指定 HTTP 请求 header Sec-WebSocket-Key1 和 Sec-WebSocket-Key2。为什么最新草案包括这些内容,以及在提高安全性方面有哪些内容?
最佳答案
这是我能弄清楚的:这些新字段用于防止跨协议(protocol)攻击。假设一些恶意 JavaScript 正在 Web 浏览器中运行,试图连接到非 HTTP、非 WebSocket 服务器(例如 FTP、telnet、SSH)。在草案 75 中,握手仅包括客户端发送 WebSocket 握手 header ,而服务器什么也不回复。之后,客户端可以发送 \x00...\xFF
帧消息。因此,客户端中的恶意 JavaScript 代码能够连接到非 WebSocket 服务器(例如 telnet),尝试登录并在那里运行命令。引入Sec-WebSocket-Key1后,除非服务器返回Sec-WebSocket-Key1等的MD5校验和,否则WebSocket连接尝试将失败。强制非WebSocket (例如 telnet)服务器几乎不可能做到这一点,尤其是因为 JavaScript 代码无法控制 Sec-WebSocket-Key1 等。
关于security - 为什么没有 Sec-WebSocket-Key1 的 WebSockets 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595282/