【问题标题】:are websockets secure or not?websockets安全与否?
【发布时间】:2012-06-23 09:03:03
【问题描述】:

wikipedia 似乎推断websockets 是安全的:

对于 Web 浏览器支持,WebSocket 协议的安全版本在 Firefox 6(名为 MozWebSocket)、[2] Google Chrome 14[3] 和 Internet Explorer 10 开发者预览版中实现。 ...虽然没有已知的漏洞利用,但它在 Firefox 4 和 5 中被禁用...

w3 表示它们不安全:

在此处遵循 HTTP 过程可能会在 Web 浏览器上下文中引入严重的安全问题。例如,考虑一个主机,在一个路径上有一个 WebSocket 服务器,在另一个路径上有一个开放的 HTTP 重定向器。突然之间,任何可以被赋予特定 WebSocket URL 的脚本都可能被诱骗与 Internet 上的任何主机通信(并可能与之共享机密),即使该脚本检查该 URL 是否具有正确的主机名也是如此。
  1. http websockets (ws:) 是否安全?

  2. https websockets (wss:) 是否安全?

  3. 如果不是 #2,是否有记录在案的预防措施?

【问题讨论】:

  • WebSockets 像任何其他形式的通信一样继承了与纯文本事务相关的安全问题(机密性和完整性)
  • 是的——定义“安全”。与 HTTPS 一样安全,当使用 HTTPS 时?是的。嗯,只要不出问题。
  • 恐怕没有什么是安全的。定义“安全”
  • Eh.... 如果套接字另一端的一方积极地与你作对,那么你对任何类型的套接字都无能为力。通信 101.

标签: javascript html websocket


【解决方案1】:

WebSocket 安全性有很多不同的方面。

您引用的维基百科的摘录是指 WebSocket 客户端对服务器数据的屏蔽。这是为了保护行为不端的中介(例如代理和缓存)不会意外地将 WebSocket 流量解释为正常的 HTTP 流量。这里的危险是 WebSockets 协议可能被用来毒化缓存中介。但是,我应该指出,这纯粹是理论上的担忧,但 Mozilla 和 Opera 不愿意发布 WebSocket 协议的 Hixie 和早期 HyBi 版本的担忧就足够了。因此,IETF 决定添加客户端到服务器的数据屏蔽功能来解决这个问题。

顺便说一句,IETF 负责 WebSocket 协议 (IETF 6455),而 W3C 负责 HTML5 WebSocket API(Javascript 对象、方法和事件)。

WebSocket 安全性的另一个方面是跨域安全性。您从 W3C WebSocket API 规范中引用的第二个片段与跨域安全性有关。 WebSockets 支持跨域连接(到提供 HTML 页面的不同主机)。此警告表示如果正常的 HTTP 跨域过程已用于 WebSocket,这将打开一个巨大的安全漏洞。但是,正是由于这个原因,WebSocket 过程是不同的。一方面,WebSocket 握手和响应被设计为无法与不支持 WebSocket 连接的 HTTP 服务器建立 WebSocket 连接:服务器必须以 WebSocket 特定的方式对密钥进行签名/散列,并在握手响应中返回。第二部分是浏览器必须发送一个 Origin 标头作为握手的一部分(这表明 HTML/Javascript 最初是从哪里加载的)。这允许服务器选择它将允许哪些域发起 WebSocket 连接。

最后,有两种WebSocket连接方式:未加密(ws://)和加密(wss://)。加密模式使用 TLS/SSL 加密来加密发送到服务器和从服务器发送的所有数据(包括初始握手和响应)。这与用于 HTTPS 连接的加密机制相同(并在浏览器中使用相同的加密引擎)。这可以防止第三方窥探正在传输的数据。

实际上只有两个版本的 WebSocket 协议值得了解:

  • Hixie76:此版本的协议增加了跨域安全性和标头哈希/签名。然而,由于协议的设计方式,很难将对它的支持添加到现有的 Web 服务器。这是 iOS 目前支持的版本(希望 iOS 6 最终会更新到 IETF 6455)

  • IETF 6455:这是 IETF 去年 11 月(2011 年 11 月)标准化的 WebSocket 协议版本。这是 IETF HyBi 工作组的工作成果(导致它的协议迭代被标记为 HyBi XX)。这是当前版本的 Chrome 和 Firefox 以及 IE 10 和即将推出的 Opera 支持的版本。

【讨论】:

【解决方案2】:

WebSocket 协议的 hixie-76 版本比之前的版本更安全,hybi-07 版本更安全。在 hixie-76 版本中添加了protection against fake requests。在hybi-07版本添加message masking.

【讨论】:

  • 好消息!例如,这些当前是否被折叠到 websockets 中,由 chrome 和 firefox 实现?
  • 参见维基百科中的implementation status
  • 有道理。 RFC6455 是以前版本的积累,可以说是。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2017-02-16
  • 2014-09-27
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 2018-01-09
  • 2018-04-06
相关资源
最近更新 更多