为啥没有 Sec-WebSocket-Key1 的 WebSocket 不安全?

Posted

技术标签:

【中文标题】为啥没有 Sec-WebSocket-Key1 的 WebSocket 不安全?【英文标题】:Why are WebSockets without Sec-WebSocket-Key1 insecure?为什么没有 Sec-WebSocket-Key1 的 WebSocket 不安全? 【发布时间】:2010-08-29 15:11:50 【问题描述】:

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

【问题讨论】:

【参考方案1】:

这是我能想到的:这些新字段用于防止跨协议攻击。让我们假设一些恶意 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 等。

【讨论】:

以上是关于为啥没有 Sec-WebSocket-Key1 的 WebSocket 不安全?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Web 套接字标头中设置 Sec-WebSocket-Key?

为啥客户端不接受我的 WebSocket 响应握手?

php websocket连接报错怎么解决

Websocket 密钥散列

websocket --工作原理

关于WebSocket学习记录